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

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]来重命名现有对象,但我想知道在创建数据帧期间是否还有其他解决方案可以使用.

r

推荐答案

不能将变量传递给这样的参数名.

相反,你能做的是:

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

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

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

set_names只是一个别名:

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

这是base R的一部分.弄清楚这个表达式为什么有效并有意义将是一个很好的练习.

R相关问答推荐

矩阵:根据变量名对列和行求和

使用绘图时的轴范围

使用 R while 循环生成随机变量

在嵌套列表中从第一个列表中选择第一个元素,从第二个列表中选择第二个元素,依此类推

允许不同数量的条件和条件本身的动态“case_when”

如何计算每个月和每年的总数?

如何使用 r data.table 填写数据框中所有可能的列?

用于判断多个数据帧的数据类型的函数 R

dplyr:通过迭代向量来根据某些条件填充列

sf 数据框中几何或坐标的“地板”空间类似功能

如果向量之间有公共元素/没有公共元素,则返回 TRUE/FALSE

如何显示多个图层的图例(geom_point 和 geom_bar)?

在R中以长格式(相对于基组)按组计算跨行的增长率

将行拆分为两行

更改输入值时不要清除(用户输入的)react 变量的值

应用 ifelse 而不使用 R 应用 for 循环

在R中的数据框中重命名和重新编码新变量的范围

Ubuntu 22.04 中 R impish repo 的问题 - impish-cran40

R:重新排列数据框中行的顺序

R Dataframe 重组和总结