2017-01-13 1 views
1

Ich habe etwa 50 data.frames. Sie sind die Ergebnisse verschiedener Simulationendplyr :: bind_cols (entfernen Sie die erste Spalte beim Kombinieren mehrerer data.frames)

Beispiele für die data.frames sind unter

SiteID <- c("Site1", "Site2", "Site3", "Site4", "Site5") 
measured_s1 <- c(21:25) 
simulated_s1 <- c(22:26) 
df <- data.frame(SiteID, measured_s1, simulated_s1) 

SiteID <- c("Site1", "Site2", "Site3", "Site4", "Site5") 
measured_s2 <- c(21:25) 
simulated_s2 <- c(21.5:25.5) 
df_s2 <- data.frame(SiteID, measured_s2, simulated_s2) 

SiteID <- c("Site1", "Site2", "Site3", "Site4", "Site5") 
measured_s3 <- c(21:25) 
simulated_s3 <- c(21.2:25.2) 
df_s3 <- data.frame(SiteID, measured_s3, simulated_s3) 

ich sie alle verbinden wollen. Ich habe es bind_cols

dplyr::bind_cols(df, df_s2, df_s3) 
     SiteID measured_s1 simulated_s1 SiteID measured_s2 simulated_s2 SiteID measured_s3 simulated_s3 
    #1 Site1   21   22 Site1   21   21.5 Site1   21   21.2 
    #2 Site2   22   23 Site2   22   22.5 Site2   22   22.2 
    #3 Site3   23   24 Site3   23   23.5 Site3   23   23.2 
    #4 Site4   24   25 Site4   24   24.5 Site4   24   24.2 
    #5 Site5   25   26 Site5   25   25.5 Site5   25   25.2 

verwenden, aber es führte in der SiteID Spalte wiederholt wird, mehr als einmal in der letzten data.frame aus bind_cols

Nun kann dies durch Entfernen des wiederholten SiteID manuell festgelegt werden oder Umwandeln der , df_s2 und df_s3 in einen langen Datenrahmen unter Verwendung von full_join durch SiteID.

Gibt es eine bessere Möglichkeit zum Löschen der SiteID-Spalte bei der Kombination der data.frames?

Antwort

1

Sie können Ihre Datenrahmen in eine Liste gesetzt, und verwenden Sie dann Reduce Funktion sie nacheinander auf der SiteID Spalte zu verbinden:

Reduce(dplyr::full_join, list(df, df_s2, df_s3)) 

# SiteID measured_s1 simulated_s1 measured_s2 simulated_s2 measured_s3 simulated_s3 
#1 Site1   21   22   21   21.5   21   21.2 
#2 Site2   22   23   22   22.5   22   22.2 
#3 Site3   23   24   23   23.5   23   23.2 
#4 Site4   24   25   24   24.5   24   24.2 
#5 Site5   25   26   25   25.5   25   25.2 

Oder die join Prozess zu vermeiden, und Sie sind beachten Sie, dass alle Datenrahmen gut ausgerichtet sind, können Sie die SiteID Spalte mit lapply entfernen, und dann verwenden do.call(bind_cols, ...):

bind_cols(df, do.call(bind_cols, lapply(list(df_s2, df_s3), `[`, -1))) 
+0

Vielen Dank tun – aelwan

1

Wir base R Methoden für diesen für Ihre Zeit und Hilfe

Reduce(function(...) merge(..., all = TRUE), mget(ls(pattern = "df.*"))) 
Verwandte Themen