将包含数据框名称的列添加到数据框列表中

dat*_*ppy 1 r

如果我有一个数据框列表

my_list = list(data, data2, data3)
Run Code Online (Sandbox Code Playgroud)

我想为每个填充了该数据框名称的列添加一列

column1    column2    new_column    
12         27         data
27         987        data
378        1234       data
Run Code Online (Sandbox Code Playgroud)

,我该怎么办呢?我希望集合中的所有DF都保留其原始名称,但也要填充列.

我试过了:

my_list = lapply(my_list, function(DF){
     DF$new_column <- DF

     DF
})
Run Code Online (Sandbox Code Playgroud)

但它不会在函数中的列表中运行.

我错过了什么?谢谢

Dav*_*urg 11

您的列表未命名.您可以在创建时手动命名

my_list = list(data = data, data2 = data2, data3 = data3)
Run Code Online (Sandbox Code Playgroud)

或者,如果您有许多数据集,则可以使用mgetls组合

my_list <- mget(ls(pattern = "^data$|^data\\d+$"))
Run Code Online (Sandbox Code Playgroud)

后来,只需使用 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.
Run Code Online (Sandbox Code Playgroud)