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

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

推荐答案

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

相反,你能做的是:

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相关问答推荐

为什么以及如何修复Mapview不显示所有点并且st_buffer合并一些区域R?

ggplot2中的X轴显示数值,单位为百,而不是十

计算满足R中条件的连续列

使用带有OR条件的grepl过滤字符串

使用`Watch()`和`renderUI()`时,不再满足仍出现在SHILINY AFTER条件中的条件输入

R中1到n_1,2到n_2,…,n到n_n的所有组合都是列表中的向量?

有没有办法使用ggText,<;Sub>;&;<;sup>;将上标和下标添加到同一元素?

跨列查找多个时间报告

在R中,如何将误差条放置在堆叠的每个条上?

按组和连续id计算日期差

如何移动点以使它们的打印不重叠

如何使用ggplot2根据绘图中生成的斜率对小平面进行排序?

使用同一行中的前一个值填充R矩阵中的缺失值

如果极点中存在部分匹配,则替换整个字符串

有没有办法更改ggplot2中第二个y轴的比例限制?

如何将字符类对象中的数据转换为R中的字符串

在具有条件的循环中添加行

R中的交叉表

如果缺少时间,如何向日期-时间列添加时间

Data.table条件合并