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

时间:2019-05-05 07:45:04

标签: r tidyverse

我有一个以.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"))

并在转置中得到以下错误:

  

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

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

2 个答案:

答案 0 :(得分:2)

也许您正在寻找类似的东西

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

通过hab将它们rawrbind数据集自动组合到一个列表中。

答案 1 :(得分:0)

通常的选择是将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)