1

我正在尝试向动物园对象添加一列。我发现合并效果很好

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

有人可以帮助解释问题是什么以及如何解决这个问题吗?

4

3 回答 3

1

尝试setNames

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

names<-.zoo像这样:

test2 <- merge(test, 0)
names(test2) <- c(names(test), paste0("x", 1))
于 2013-09-23T14:14:12.467 回答
1

我发现这个解决方案非常简单和优雅。它使用该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 :-)
于 2016-09-30T14:29:35.630 回答
0

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

test = zoo(data.frame('x' = c(1,2,3)))
var <- paste0('x',1)
test = merge(test, var = 0)
于 2013-09-23T07:57:56.967 回答