2017-07-18 50 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 
相關問題