R 创建具有动态列名的新列

R 创建具有动态列名的新列,r,zoo,R,Zoo,我正在尝试向zoo对象添加列。我发现merge很有效 test = zoo(data.frame('x' = c(1,2,3))) test = merge(test, 'x1' = 0) 但是,当我尝试动态命名列时,它不再有效 test = merge(test, paste0('x',1) = 0) Error: unexpected '=' in "merge(test,paste0('x',1) =" 我一直在使用数据帧,同样的语法也可以使用 test = data.frame('x

我正在尝试向zoo对象添加列。我发现merge很有效

test = zoo(data.frame('x' = c(1,2,3)))
test = merge(test, 'x1' = 0)
但是,当我尝试动态命名列时,它不再有效

test = merge(test, paste0('x',1) = 0)
Error: unexpected '=' in "merge(test,paste0('x',1) ="
我一直在使用数据帧,同样的语法也可以使用

test = data.frame('x' = c(1,2,3))
test[paste0('x',1)] = 0

有人能解释一下问题是什么以及如何解决这个问题吗

Merge需要一个字符串作为变量名,它不理解作为函数返回值的变量名。为什么不呢

test = zoo(data.frame('x' = c(1,2,3)))
var <- paste0('x',1)
test = merge(test, var = 0)
test=zoo(data.frame('x'=c(1,2,3)))

var尝试
setNames

setNames( merge(test, 0), c(names(test), paste0("x", 1)) )

或者
names我发现这个解决方案非常简单和优雅。它使用
eval()
函数将字符串解释为R命令。因此,您完全可以按照自己的方式组装字符串:

test = merge(test, paste0("x",1) = 0)
# does not work (see question)

test[,"x1"] <- 0
# does not work for uninitialized columns

test$x1 <- 0
# works to initialize a new column

# so lets trick R by assembling this command out of strings:
newcolumn <- "x1"
eval(parse(text=paste0("test$",newcolumn," <- 0")))
# welcome test$x1 :-)
test=merge(测试,粘贴0(“x”,1)=0)
#不起作用(见问题)

测试[,“x1”]它真的是“同一种语法”吗?您是否尝试过粘贴0('x',1)=0
。我真正想说的是,我希望找到一个解决方案,允许我在zoo中动态添加并命名一个新列,就像我可以使用一个数据框一样。这个数据框并不漂亮,但你可以将你的zoo对象转换成一个数据框,对它进行操作并将其转换回:
read.zoo(replace(fortify.zoo(test),paste0(“x”,1),0))
此解决方案的另一种选择是调用
$
test = merge(test, paste0("x",1) = 0)
# does not work (see question)

test[,"x1"] <- 0
# does not work for uninitialized columns

test$x1 <- 0
# works to initialize a new column

# so lets trick R by assembling this command out of strings:
newcolumn <- "x1"
eval(parse(text=paste0("test$",newcolumn," <- 0")))
# welcome test$x1 :-)