R 基于变量在新数据框中设置列名

R 基于变量在新数据框中设置列名,r,R,我的目标是能够将列名分配给基于传递的变量创建的数据帧。例如: i='column1' data.frame(i=1) i 1 1 当我希望列名称为“column1”时,列名称上方为“i”。我知道以下方法有效,但没有我想要的那么有效: i='column1' df<-data.frame(x=1) setnames(df,i) column1 1 1 i='column1' df如果想法是去掉集合名,那么除了 i <- 'column1' data.frame

我的目标是能够将列名分配给基于传递的变量创建的数据帧。例如:

i='column1'

data.frame(i=1)
  i
1 1
当我希望列名称为“column1”时,列名称上方为“i”。我知道以下方法有效,但没有我想要的那么有效:

i='column1'
df<-data.frame(x=1)
setnames(df,i)
  column1
1       1
i='column1'

df如果想法是去掉
集合名,那么除了

i <- 'column1'
data.frame(`attr<-`(list(1), "names", i))
#   column1
# 1       1

因此,您可能会弄乱name属性。

了解base R是如何以这种方式工作的很好:

i  <- 'cloumn1'
df <- `names<-`(data.frame(1), i)
df
#  cloumn1
#1       1

i除了其他用户发布的答案之外,我认为您可能会被您已经提出的解决方案所困扰。如果您已经有一个具有预期行数的数据框,则可以使用括号添加一个新列:

df <- data.frame('column1'=1)
i <- 'column2'
df[[i]] <- 2
df
column1 column2
1       2

df不太清楚您希望如何提高效率,但您可以在数据框与
colnames
组合后立即添加所有列名。这里有一个基于你的例子

data.frame(Td)
a b
1 1 4
2 1 5


nam您只需将列变量的名称及其值作为参数传递给dataframe,而无需添加更多行:

df <- data.frame(column1=1)
df
#  column1
#1       1

df这种效率到底有多低?你在寻找什么样的解决方案?我看不出有什么问题。您正在尝试在R脚本中保存行吗?通常,我宁愿将这些行全部包含在一起编写—例如在data.table:
a='column1'
上。要获得第1列的总和:
sum(dt[,eval(as.name(a)))
awwww是的,这是用晦涩难懂的单行线替换易读多行线的最好传统+1!@数学咖啡:与
df相同的数据
df <- data.frame(column1=1)
df
#  column1
#1       1