如果我有数据框列表
my_list = list(data, data2, data3)
我想为每个填充了该数据框名称
的列添加一列column1 column2 new_column
12 27 data
27 987 data
378 1234 data
,我该怎么做?我希望集合中的所有DF都保留其原始名称,但也要填充一列。
我试过了:
my_list = lapply(my_list, function(DF){
DF$new_column <- DF
DF
})
但它不会在函数中的列表中运行。
我错过了什么?感谢
答案 0 :(得分:11)
您的列表未命名。您可以在创建时手动命名
my_list = list(data = data, data2 = data2, data3 = data3)
或者您可以使用mget
&amp;如果您有许多数据集,则ls
组合
my_list <- mget(ls(pattern = "^data$|^data\\d+$"))
后记,只需使用Map
my_list <- Map(cbind, my_list, new_clumn = names(my_list))
my_list
# $data
# column1 column2 new_clumn
# 1 12 27 data
# 2 27 987 data
# 3 378 1234 data
#
# $data2
# column1 column2 new_clumn
# 1 12 27 data2
# 2 27 987 data2
# 3 378 1234 data2
#
# $data3
# column1 column2 new_clumn
# 1 12 27 data3
# 2 27 987 data3
# 3 378 1234 data3
#If you want to put the data sets back to the global environment you can use `list2env`
#list2env(my_list, .GlobalEnv)
#Please Note that it is usually not the preffered practice to move data frames to the global environment and back. It is preferred to store all you data sets in list from the very beginning and manipulating them within the list using functions such as `Map`, `lapply`, etc.
答案 1 :(得分:0)
> x <- data.frame(1:2, 2:1)
> my_list <- list(a = x, b = x)
> my_list
$a
X1.2 X2.1
1 1 2
2 2 1
$b
X1.2 X2.1
1 1 2
2 2 1
> your_new_list <- lapply(names(my_list),
+ function(current_name)
+ transform(my_list[[current_name]],
+ new_column = current_name))
> your_new_list
[[1]]
X1.2 X2.1 new_column
1 1 2 a
2 2 1 a
[[2]]
X1.2 X2.1 new_column
1 1 2 b
2 2 1 b
答案 2 :(得分:0)
我改变了,现在看看这是否是你想要的:
names<-names(my_list)
count <- 0
lapply(my_list, function(DF){
count <<- count+1
DF[,length(DF)+1] <- names[count]
names(DF)[length(DF)] <- "new_clumn"
DF
})