变量作为数据框中的列名

时间:2015-05-06 16:45:15

标签: r

有没有办法将变量中存储的字符串用作新数据框中的列名?预期结果应为:

col.name <- 'col1'
df <- data.frame(col.name=1:4)
print(df)

# Real output
  col.name
1        1
2        2
3        3
4        4

# Expected output
  col1
1    1
2    2
3    3
4    4

我知道我可以创建数据框,然后使用 names()重命名列或使用 df [,col.name] 作为现有对象,但是我想知道在创建数据框期间是否还有其他解决方案可供使用。

3 个答案:

答案 0 :(得分:23)

您不能将变量传递给参数名称。

相反,你可以做的是:

df <- data.frame(placeholder_name = 1:4)
names(df)[names(df) == "placeholder_name"] <- col.name

或使用默认名称"V1"

df <- data.frame(1:4)
names(df)[names(df) == "V1"] <- col.name

或按职位分配:

df <- data.frame(1:4)
names(df)[1] <- col.name

或者如果您只有一列,则只需替换整个names属性:

df <- data.frame(1:4)
names(df) <- col.name

set_names包中还有magrittr函数,您可以用它来一步完成最后一个解决方案:

library(magrittr)
df <- set_names(data.frame(1:4), col.name)

set_names只是以下的别名:

df <- `names<-`(data.frame(1:4), col.name)

这是基础R的一部分。弄清楚为什么这个表达有效并且有意义将是一个很好的练习。

答案 1 :(得分:4)

除了ssdecontrol的回答,还有第二种选择。

您正在寻找assign(col.name, "col1") assign(paste(col.name), 1:4) df <- data.frame(mget(col.name)) print(df) col1 1 1 2 2 3 3 4 4 。首先将名称分配给变量,然后将值赋给先前分配的变量。之后,mget将评估字符串并将其传递给data.frame。

.csv

答案 2 :(得分:0)

我不建议你这样做,但是:

col.name <- 'col1'
eval(parse(text=paste0('data.frame(', col.name, '=1:4)')))