我在列表对象中保存了多个数据框。它们共享相同的两个列名称。我想将第二列重命名为数据框的名称。
示例数据:
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) )
答案 0 :(得分:2)
在这种情况下,您可能希望使用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
。
答案 1 :(得分:0)
要跟踪名称,可以使用:
listDF <- list(df1 = df1, df2 = df2, df3 = df3, df4 = df4)
然后您可以使用for循环:
for (i in names(listDF)){
colnames(listDF[[i]]) <- c("A", i)
}
或者如果您需要使用lapply,则可以使用以下方法:
newDF <- lapply(names(listDF), function(x){
colnames(listDF[[x]]) <- c("A", x)
listDF[[x]]
})
names(newDF) <- names(listDF)