根据R中列表的名称重命名数据框的列

标签 r lapply sapply mapply columnname

我有多个数据框保存在一个列表对象中。它们共享相同的两个列名。我想将第二列重命名为数据框的名称。

示例数据:

df1 <- data.frame(A = 1:10, B= 11:20)
df2 <- data.frame(A = 21:30, B = 31:40) 
df3 <- data.frame(A = 31:40, B= 41:50)
df4 <- data.frame(A = 51:80, B = 61:70) 

listDF <- list(df1, df2,df3, df4)

我正在尝试使用 lapply 重命名第二列以匹配数据框的名称。

# trying to rename second column after the element of the list they're located in
listDF_2 <- lapply(names(listDF), function(x) setNames(listDF[[x]], x) )

最佳答案

在这种情况下,您可能喜欢使用 dplyr::bind_rows。它简化了使用 data.frames 的名称作为组合数据框中的新列。

# Create list as.
listDF <- list(df1 = df1, df2 = df2,df3 = df3, df4 = df4)

library(dplyr)

# Now combine all data frames. The name of data frame will be in 'DF_Name' column
bind_rows(listDF, .id = "DF_Name")

#    DF_Name  A  B
# 1      df1  1 11
# 2      df1  2 12
# 3      df1  3 13
# 4      df1  4 14
# 5      df1  5 15
# 6      df1  6 16
# 7      df1  7 17
# 8      df1  8 18
# 9      df1  9 19
# 10     df1 10 20
# 11     df2 21 31
# 12     df2 22 32
# 13     df2 23 33
#.................
#.................
# 58     df4 78 68
# 59     df4 79 69
# 60     df4 80 70

注意正如@Moody_Mudskippe指出的那样,可以简单地使用

listDF <- lst(df1, df2, df3, df4)

然后使用dplyr::bind_rows

关于根据R中列表的名称重命名数据框的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51314582/

相关文章:

r - 在 apply 和 unique 中处理 NA 值

r - 将 data.frames 列表的列表转换为 R 中的单个 data.frame

R 连续列之间的相关性

r - 如何在大型稀疏矩阵中组合具有相同名称的列

r - 对质心的 95% 置信椭圆进行颜色编码

r - 在数据帧 : Writing to File and Naming Binded Vector in R 上

r - 在列表上递归应用函数

r - data.table 在 R 中复制表

r - 将数据框列表转换为具有列表名称的单个数据框

r - 使用 sapply 仅获取列表的第一个元素