我有多达30个带有公共ID列的数据框。每个df中还有其他列,但我只是在这里显示ID。
Library DF1 DF2 DF3
ID# ID# ID# ....
1111 1111 1112 ....
2222 1111 3333 ....
3333 3333 3333 ....
4444 2222 4444 ....
我必须将每个表中的ID#colum与库ID colum进行比较,以确保Id编号与库中的ID编号匹配。
目前我使用dplyr并做...
DF1 %>%
anti_join(library, by = 'ID#')
并且每个表都相同。它只会返回不在库中的任何ID号,我为每个数据表执行相同的命令,但是想为所有30个表运行它。我把所有的DF放在一个列表中,但我不确定如何继续,for循环?应用?任何帮助将不胜感激,因为这推动了我对R知识的界限。
答案 0 :(得分:4)
您可以使用purrr
迭代data.frame列表。下面是一个使用3 data.frame来提取与参考1不常见的ID的示例。
您可以在map_*
函数中使用任何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