2017-07-18 2 views
0

Ich habe bis zu 30 Datenrahmen mit einer gemeinsamen ID-Spalte. Es gibt andere Spalten in jedem df, aber ich zeige nur die ID hier.Anwenden einer dplyr-Funktion auf eine gemeinsame Spalte über 30 Datenrahmen

Library  DF1   DF2  DF3 

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

Ich habe die ID # colum in jeder These Tabellen in der Bibliothek ID colum zu vergleichen, um sicherzustellen, die ID-Nummer eine ID-Nummer in der Bibliothek übereinstimmt.

Derzeit verwende ich dplyr und tun ...

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

und das gleiche für jede Tabelle. Es würde nur irgendwelche ID-Nummern zurückgeben, die nicht in der Bibliothek sind. Ich mache denselben Befehl für jede Datentabelle, möchte ihn aber für alle 30 meiner Tabellen ausführen. Ich lege alle meine DFs in eine Liste, aber ich bin mir nicht sicher, wie es weitergehen soll, for loop? sich bewerben? jede Hilfe würde geschätzt werden, da dies meine Grenzen des R-Wissens verschiebt.

Antwort

4

Sie können über eine Liste von data.frame mit purrr iterieren. Hier ist ein Beispiel, das 3 data.frame verwendet, um eine ID zu extrahieren, die bei Referenz 1 nicht üblich ist.

Sie können jeden beliebigen map_* fonction verwenden taht Sie am besten paßt jede Funktion, die Sie in einer map_* Funktion wollen

sehen purrr website für weitere Informationen


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 
Verwandte Themen