将 dplyr 函数应用于 30 个数据帧中的一个公共列
Apply a dplyr function to one common column across 30 dataframes
我有多达 30 个具有公共 ID 列的数据框。每个 df 中还有其他列,但我只是在这里显示 ID。
Library DF1 DF2 DF3
ID# ID# ID# ....
1111 1111 1112 ....
2222 1111 3333 ....
3333 3333 3333 ....
4444 2222 4444 ....
我必须将每个论文 table 中的 ID# 列与图书馆 ID 列进行比较,以确保 ID 号与图书馆中的 ID 号相匹配。
目前我使用 dplyr 并做...
DF1 %>%
anti_join(library, by = 'ID#')
每个 table 都一样。它只会 return 任何不在库中的 ID 号,我对每个数据执行相同的命令 table 但想 运行 我的所有 30 个 table ]s。我将我所有的 DF 都放在一个列表中,但我不确定如何继续,for 循环?申请?任何帮助将不胜感激,因为这突破了我对 R 知识的界限。
您可以使用 purrr
遍历 data.frame 的列表。下面是一个使用 3 data.frame 来提取与引用不常见的 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
我有多达 30 个具有公共 ID 列的数据框。每个 df 中还有其他列,但我只是在这里显示 ID。
Library DF1 DF2 DF3
ID# ID# ID# ....
1111 1111 1112 ....
2222 1111 3333 ....
3333 3333 3333 ....
4444 2222 4444 ....
我必须将每个论文 table 中的 ID# 列与图书馆 ID 列进行比较,以确保 ID 号与图书馆中的 ID 号相匹配。
目前我使用 dplyr 并做...
DF1 %>%
anti_join(library, by = 'ID#')
每个 table 都一样。它只会 return 任何不在库中的 ID 号,我对每个数据执行相同的命令 table 但想 运行 我的所有 30 个 table ]s。我将我所有的 DF 都放在一个列表中,但我不确定如何继续,for 循环?申请?任何帮助将不胜感激,因为这突破了我对 R 知识的界限。
您可以使用 purrr
遍历 data.frame 的列表。下面是一个使用 3 data.frame 来提取与引用不常见的 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