有没有更好的方法将列表字段的名称(通常为数据框)添加为数据框的列?
示例数据

df1 <- data.frame(x = 1:3, y = 3:5)
df2 <- data.frame(x = 1:3, y = 3:5)
df3 <- data.frame(x = 1:3, y = 3:5)

list = list()
list[["DF1"]] <- df1
list[["DF2"]] <- df2
list[["DF3"]] <- df3
它正在工作,但我想在可能的情况下避免for循环。
 for (i in 1:length(list)) {
     list[[i]][,"name"] <- names(list[i])
    }
我正在尝试:
lapply(list, FUN = function(df){
  df$anothername <- names(list$df) #This return colnames.
  return(df)
})
我想得到的输出:
$DF1
  x y name
1 1 3  DF1
2 2 4  DF1
3 3 5  DF1

$DF2
  x y name
1 1 3  DF2
2 2 4  DF2
3 3 5  DF2

$DF3
  x y name
1 1 3  DF3
2 2 4  DF3
3 3 5  DF3

最佳答案

我们可以使用Mapcbind中的每个data.frame以及相应的list name进行list编码。

Map(cbind, list, name=names(list))
#$DF1
#  x y name
#1 1 3  DF1
#2 2 4  DF1
#3 3 5  DF1

#$DF2
#  x y name
#1 1 3  DF2
#2 2 4  DF2
#3 3 5  DF2

#$DF3
#  x y name
#1 1 3  DF3
#2 2 4  DF3
#3 3 5  DF3

更好的选择是rbindlist以创建单个数据集。
library(data.table)
rbindlist(list, idcol="name")

关于r - 如何将列表名称添加到df作为数据框的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36641875/

10-12 16:31
查看更多