这个问题很简单,但我找不到解决办法。
我想创建一个新的数据帧,用paste0
定义列名。
理想情况下,我想做这样的事情(哪一个不起作用)。
mydataframe <- data.frame(id = 1,
paste0('Here_','my_','column_','name') = 'foo')
# Error: unexpected '=' in:
# "mydataframe <- data.frame(id = 1,
# paste0('Here_','my_','column_','name') ="
还有,为什么不工作呢?
发布于 2015-04-20 01:00:04
Data.frame
是一个函数,因此接受参数。这些参数不能是其他函数。例如,您不能定义像fn <- function(paste0('Hi_', 'how_are_you') = x) { x }
这样的函数。R并不是这样工作的。
但是,您仍然可以在事后动态更改列名:
df <- data.frame(1, 'foo')
names(df) <- c('id', paste0('Here_','my_','column_','name'))
这应该是你想要的。
额外的好处:你可以像下面这样简化你的粘贴:paste('Here', 'my', 'column', 'name', sep = '_')
。
发布于 2015-04-20 01:00:46
你可以做到
df[, paste('Here', 'my', 'column', 'name', sep = '_')] <- 'foo'
这样做是不可能的,因为不会计算任何变量,它只会得到您正在编写的内容,并尝试将其用作列的名称。这样,paste('Here', 'my', 'column', 'name', sep = '_')
就会被求值,返回的字符串实际上被用作该列的名称。
发布于 2015-04-20 05:46:25
前段时间我需要同样的东西,并解决了将所有命令放入粘贴函数中的问题,如下所示
i=3
mydf <- eval(parse(text = paste0(
"data.frame( id =", 1, ", my_col", i, "=", 55, ")")))
https://stackoverflow.com/questions/29732858
复制相似问题