R:用paste()定义列名

时间:2015-04-19 16:52:26

标签: r dataframe

问题很简单但我无法找到解决方案。

我想创建一个新的数据框,用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') ="

另外,为什么不起作用?

4 个答案:

答案 0 :(得分:4)

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 = '_')

答案 1 :(得分:0)

你可以做到

df[, paste('Here', 'my', 'column', 'name', sep = '_')] <- 'foo'

不可能像你建议的那样去做,因为没有评估变量,它只是得到你正在编写的内容,并试图将它用作列的名称。这样,paste('Here', 'my', 'column', 'name', sep = '_')得到了评估,返回的字符串实际上被用作列的名称。

答案 2 :(得分:0)

前段时间我需要同样的解决方法,将所有命令放在粘贴功能中,并进行以下评估

i=3
mydf <- eval(parse(text = paste0(
  "data.frame( id =", 1, ", my_col", i, "=", 55, ")")))

答案 3 :(得分:0)

您可以使用setNames通过paste()定义data.frame的列名-动态指定列名

setNames(data.frame(1, 'foo'), c("id",  paste0('Here_','my_','column_','name')))
#  id Here_my_column_name
#1  1                 foo