我有一个以.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”子集都已加入,但我还没有真正考虑过加入,因为还没有解决这个子集。任何帮助将不胜感激。
答案 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
将它们raw
和rbind
数据集自动组合到一个列表中。
答案 1 :(得分:0)
通常的选择是将do.call
与Map
一起使用。也可以使用多个长度的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)