R:根据列表元素名称创建新的数据帧变量



我有一个由11个数据帧组成的list,每个数据帧的名称描述其来源。本质上,我想添加一个";源";列添加到列表中的每个数据帧,该列表包含每个单元格中数据帧的名称。

这一切都是为了让数据可以向下传递到CRAN包,而CRAN包在处理列表时效果不佳。

我试过使用lapply,并查看了一些其他SO答案,但似乎没有合适的答案。

非常感谢您的帮助

  • 谢谢
## Some toy data 
p1 <- c("A", "B", "C", "D", "E")  
p2 <- c(rnorm(5, 1.25, 1))  
p3 <- c(rnorm(5, 1.25, 1))
source_name_1 <- data.frame(p1, p2, p3)  
p2 <- c(rnorm(5, 1.25, 1))  
p3 <- c(rnorm(5, 1.25, 1))  
source_name_2 <- data.frame(p1, p2, p3) 

p2 <- c(rnorm(5, 1.25, 1))  
p3 <- c(rnorm(5, 1.25, 1))  
source_name_3 <- data.frame(p1, p2, p3)  
df_list <- list(source_name_1,
source_name_2,
source_name_3)
names(df_list) = paste0("source_name_", 1:length(df_list))
## Previous attempt based on other SO answers
df_list_2 <- lapply(names(df_list),
function(x) cbind(df_list),
source = names(df_list),
SIMPLIFY = TRUE)
#essentially I'm aiming for a 'p4' column in each df comprised of `^source_name[1-9]`

正如@monte在注释中所指出的,您必须命名列表元素。假设它们都遵循一个模式;源名称;你可以使用dplyrpurrr,使用你的玩具数据

df_list <- list(source_name_1,
source_name_2,
source_name_3)
names(df_list) = paste0("source_name_", 1:length(df_list))
library(dplyr)
library(purrr)
purrr::map2(df_list, names(df_list), ~ mutate(.x, p4 = .y))
#> $source_name_1
#>   p1        p2        p3            p4
#> 1  A 0.1531752 1.5198717 source_name_1
#> 2  B 0.8299500 1.4534902 source_name_1
#> 3  C 2.1038329 0.3968661 source_name_1
#> 4  D 2.3939380 1.0487960 source_name_1
#> 5  E 1.5773872 1.8611408 source_name_1
#> 
#> $source_name_2
#>   p1         p2        p3            p4
#> 1  A  0.8662918 -1.014854 source_name_2
#> 2  B -1.8042179  1.339152 source_name_2
#> 3  C  1.4786439 -1.940525 source_name_2
#> 4  D  1.8360023  1.439776 source_name_2
#> 5  E  0.9648816  2.051714 source_name_2
#> 
#> $source_name_3
#>   p1       p2        p3            p4
#> 1  A 1.268633 1.7334884 source_name_3
#> 2  B 1.615704 1.0503553 source_name_3
#> 3  C 2.056368 1.4954794 source_name_3
#> 4  D 2.335987 1.6293595 source_name_3
#> 5  E 1.236283 0.4498371 source_name_3

玩具数据

## Some toy data 
p1 <- c("A", "B", "C", "D", "E")  
p2 <- c(rnorm(5, 1.25, 1))  
p3 <- c(rnorm(5, 1.25, 1))
source_name_1 <- data.frame(p1, p2, p3)  
p2 <- c(rnorm(5, 1.25, 1))  
p3 <- c(rnorm(5, 1.25, 1))  
source_name_2 <- data.frame(p1, p2, p3) 
p2 <- c(rnorm(5, 1.25, 1))  
p3 <- c(rnorm(5, 1.25, 1))  
source_name_3 <- data.frame(p1, p2, p3)  

相关内容

  • 没有找到相关文章

最新更新