繁体   English   中英

嵌套在多个列表中的列表的R个重复子集

[英]R repetitive subset of lists nested within multiple lists

我有一个以.xlsx格式提供给我的数据集,其中包含多个工作簿,其中包含多个工作表,这些工作表具有相同的名称,并且这些工作表中的数据列相似。 我最终希望以相同的名称加入数据表并进行一些分析。

由于多年以来工作簿中都有大量数据,因此我想有效地合并数据和格式,进行分析等工作。我是列表的新手,但已成功读取数据,但在子设置和绑定上遇到了麻烦。 我已经制作了以下虚拟数据和脚本:

#tlm2009
b1<-c('a', 'b', 'c')
b2<-    c(4,    2,  3)
hab<-data.frame(b1,b2)

c1<-c('a', 'b', 'c', 'd')
c2<-    c(1,    2,  3, 4)
raw<-data.frame(c1,c2)

tlm2009<-list(hab,raw)

#tlm2010

b1<-c('a', 'b', 'c','d')
b2<-    c(1,    2,  3, 4)
hab<-data.frame(b1,b2)

c1<-c('a', 'b', 'c', 'd', "e")
c2<-    c(1,    2,  3, 4, 5)
raw<-data.frame(c1,c2)

tlm2010<-list(hab,raw)

my.list<-list(tlm2009,tlm2010)

然后,我运行以下代码来提取“ hab”和/或“ raw”,但它不起作用

library(tidyverse)
unlist(my.list) %>%
    data.frame(val = .) %>%
    filter(str_detect(id, "(hab|raw)"))

library(purrr)
map(transpose(my.list),~map_dfc(.x,"hab"))

并为移调得到以下错误:

转置错误(my.list):列表输入的项目1不是原子向量

因此,我希望所有“ habs”子集都已加入,但我还没有真正考虑过加入,因为还没有解决这个子集。 任何帮助,将不胜感激。

也许您正在寻找这样的东西

Map(rbind, my.list[[1]], my.list[[2]])

#[[1]]
#  b1 b2
#1  a  4
#2  b  2
#3  c  3
#4  a  1
#5  b  2
#6  c  3
#7  d  4

#[[2]]
#  c1 c2
#1  a  1
#2  b  2
#3  c  3
#4  d  4
#5  a  1
#6  b  2
#7  c  3
#8  d  4
#9  e  5

这会自动将您habraw通过数据集中在一起,在一个列表rbind荷兰国际集团他们。

通常的选择是将do.callMap一起使用。 也可以是多个长度的list

do.call(Map, c(f = rbind, my.list))
#[[1]]
#  b1 b2
#1  a  4
#2  b  2
#3  c  3
#4  a  1
#5  b  2
#6  c  3
#7  d  4

#[[2]]
#  c1 c2
#1  a  1
#2  b  2
#3  c  3
#4  d  4
#5  a  1
#6  b  2
#7  c  3
#8  d  4
#9  e  5

或使用tidyverse

library(tidyverse)
pmap(my.list, bind_rows)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM