2017-07-18 5 views
0

共通のID列を持つデータフレームは最大30個あります。各dfには他の列がありますが、ここにIDを表示しています。30のデータフレームにわたって共通の1つの列にdplyr関数を適用します。

Library  DF1   DF2  DF3 

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

私はID番号がライブラリ内のID番号と一致することを確認するために、ライブラリIDのcolumに論文テーブルのそれぞれにID番号のcolumを比較する必要があります。

現在、私はdplyrを使用して、各テーブルに...

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

と同じことを行います。それはライブラリにないID番号を返すだけで、私はすべてのデータテーブルに対してこの同じコマンドを実行しますが、私のテーブルのすべての30のためにそれを実行したいと思います。私はすべてのDFをリストに入れましたが、どのように進行するのか、実際にはわかりません。適用するか?これがR知識の私の境界を押し上げるので、どんな助けも認められるでしょう。

答えて

4

purrrを使用してdata.frameのリストを反復処理できます。ここでは、3つのdata.frameを使用して、参照IDと共通でないIDを抽出する例を示します。

あなたは

は、より多くの情報


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 
ため purrr websiteを参照してください map_*関数内で最高のお好きな機能をあなたにぴったりtaht任意の map_* fonctionを使用することができます
関連する問題