2017-07-18 45 views
0

我拥有多达30个数据框,并带有一个公共ID列。每个df还有其他colums,但我只是在这里显示ID。跨30个数据帧对一个公共列应用dplyr函数

Library  DF1   DF2  DF3 

ID#   ID#   ID#  .... 
1111   1111  1112  .... 
2222   1111  3333  .... 
3333   3333  3333  .... 
4444   2222  4444  .... 

我的ID#科拉姆每论文表的比较图书馆ID科拉姆以确保身份证号码匹配库中的ID号。

目前我使用dplyr,做...

DF1 %>% 
     anti_join(library, by = 'ID#') 

与同为每个表。它只会返回不在库中的任何ID号,我对每个数据表都执行相同的命令,但希望为我的所有30个表运行它。我把所有的DF都放在一个列表中,但我不确定如何继续,for循环?应用?任何帮助将不胜感激,因为这推动了我的知识界限。

回答

4

您可以使用purrr迭代data.frame列表。下面是一个使用3个data.frame来提取与引用不相同的ID的例子。

你可以使用任何map_* fonction taht最适合你,你想map_*函数中的任何功能

看到purrr website更多信息


library(dplyr) 
#> 
#> Attachement du package : 'dplyr' 
#> The following objects are masked from 'package:stats': 
#> 
#>  filter, lag 
#> The following objects are masked from 'package:base': 
#> 
#>  intersect, setdiff, setequal, union 
set.seed(999) 
df_library <- data_frame(ID = sort(sample(1:12, 10))) 
df1 <- data_frame(ID = sort(sample(1:12, 10))) 
df2 <- data_frame(ID = sort(sample(1:12, 10))) 
df3 <- data_frame(ID = sort(sample(1:12, 10))) 


library(purrr) 
#> 
#> Attachement du package : 'purrr' 
#> The following objects are masked from 'package:dplyr': 
#> 
#>  contains, order_by 

list(df1 = df1, df2 = df2, df3 = df3) %>% 
    map_df(~ anti_join(.x, df_library, by = "ID"), .id = "df_name") 
#> # A tibble: 4 x 2 
#> df_name ID 
#>  <chr> <int> 
#> 1  df1 12 
#> 2  df2 12 
#> 3  df3  3 
#> 4  df3 12 
相关问题