如何解决R:根据列表元素名称创建新的数据框变量
我有一个11个数据帧的list
,每个数据帧的名称描述了它的来源。本质上,我想向列表中的每个数据框添加一个“源”列,其中包含每个单元格中数据框的名称。
仅此而已,因此数据可以向下游传递到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))
source_name_1 <- data.frame(p1,p2,p3)
p2 <- c(rnorm(5,1))
source_name_2 <- data.frame(p1,p3)
p2 <- c(rnorm(5,1))
source_name_3 <- data.frame(p1,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在注释中指出的那样,您必须命名列表元素。假设它们都遵循带有“ source_name_”的模式,则可以使用玩具数据使用dplyr
和purrr
来做到这一点
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))
source_name_1 <- data.frame(p1,p2,p3)
p2 <- c(rnorm(5,1))
source_name_2 <- data.frame(p1,p3)
p2 <- c(rnorm(5,1))
source_name_3 <- data.frame(p1,p3)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。