0

我有多达 30 个带有公共 ID 列的数据框。每个 df 中还有其他列,但我只是在这里显示 ID。

Library      DF1         DF2      DF3

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

我必须将每个这些表中的 ID# 列与库 ID 列进行比较,以确保 ID 号与库中的 ID 号匹配。

目前我使用 dplyr 并做...

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

每张桌子都一样。它只会返回任何不在库中的 ID 号,我对每个数据表执行相同的命令,但想为我的所有 30 个表运行它。我将所有 DF 都放在一个列表中,但我不确定如何进行 for 循环?申请?任何帮助将不胜感激,因为这推动了我的 R 知识界限。

4

1 回答 1

4

您可以使用 遍历 data.frame 列表purrr。这是一个使用 3 data.frame 提取与参考不常见的 ID 的示例。

您可以使用任何map_*最适合您的map_*函数

有关更多信息,请参见purrr 网站


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
于 2017-07-18T19:05:52.633 回答