首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R:使用paste()定义列名

R:使用paste()定义列名
EN

Stack Overflow用户
提问于 2015-04-20 00:52:26
回答 4查看 14.2K关注 0票数 10

这个问题很简单,但我找不到解决办法。

我想创建一个新的数据帧,用paste0定义列名。

理想情况下,我想做这样的事情(哪一个不起作用)。

代码语言:javascript
运行
复制
mydataframe <- data.frame(id = 1,
                          paste0('Here_','my_','column_','name') = 'foo')
# Error: unexpected '=' in:
#   "mydataframe <- data.frame(id = 1,
#                           paste0('Here_','my_','column_','name') ="

还有,为什么不工作呢?

EN

回答 4

Stack Overflow用户

发布于 2015-04-20 01:00:04

Data.frame是一个函数,因此接受参数。这些参数不能是其他函数。例如,您不能定义像fn <- function(paste0('Hi_', 'how_are_you') = x) { x }这样的函数。R并不是这样工作的。

但是,您仍然可以在事后动态更改列名:

代码语言:javascript
运行
复制
df <- data.frame(1, 'foo')
names(df) <- c('id', paste0('Here_','my_','column_','name'))

这应该是你想要的。

额外的好处:你可以像下面这样简化你的粘贴:paste('Here', 'my', 'column', 'name', sep = '_')

票数 7
EN

Stack Overflow用户

发布于 2015-04-20 01:00:46

你可以做到

代码语言:javascript
运行
复制
df[, paste('Here', 'my', 'column', 'name', sep = '_')] <- 'foo'

这样做是不可能的,因为不会计算任何变量,它只会得到您正在编写的内容,并尝试将其用作列的名称。这样,paste('Here', 'my', 'column', 'name', sep = '_')就会被求值,返回的字符串实际上被用作该列的名称。

票数 1
EN

Stack Overflow用户

发布于 2015-04-20 05:46:25

前段时间我需要同样的东西,并解决了将所有命令放入粘贴函数中的问题,如下所示

代码语言:javascript
运行
复制
i=3
mydf <- eval(parse(text = paste0(
  "data.frame( id =", 1, ", my_col", i, "=", 55, ")")))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29732858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档