2017-04-12 4 views

Antwort

5

Verwenden intersect die Spalten in beiden data.frames zu finden, dann rbind die Zeilen.

df1 = data.frame(A=1:10, C=11:20, E=21:30) 
df2 = data.frame(A=101:103, B=111:113, C=121:123, 
    D=131:133, E=141:143) 

InBoth = intersect(colnames(df1), colnames(df2)) 
df3=rbind(df1[,InBoth], df2[,InBoth]) 
df3 
    A C E 
1 1 11 21 
2 2 12 22 
3 3 13 23 
4 4 14 24 
5 5 15 25 
6 6 16 26 
7 7 17 27 
8 8 18 28 
9 9 19 29 
10 10 20 30 
11 101 121 141 
12 102 122 142 
13 103 123 143 
+0

Vielen Dank, das ist perfekt. Ich werde das als Antwort in 4 Minuten setzen, da deins zu schnell ist: D –

1

Dies verwendet dplyr bind_rows (nur weil ich stark verwenden dplyr)

library(dplyr) 
df1 <- data.frame(a = 1:5, b=11:15, c=21:25) 
df2 <- data.frame(a = 101:106, b = 121:126, e = 141:146) 
new_names <- intersect(names(df1), names(df2)) 
bind_rows(df1[,new_names], df2[,new_names]) 

#  a b 
# 1 1 11 
# 2 2 12 
# 3 3 13 
# 4 4 14 
# 5 5 15 
# 6 101 121 
# 7 102 122 
# 8 103 123 
# 9 104 124 
# 10 105 125 
# 11 106 126 
+1

Macht mehr Sinn, new_names nur einmal zu schreiben, denke ich: 'bind_rows (df1, df2)%>% select _ (. Dots = neue_namen)' – Frank

+1

Taking @Frankspoint ein wenig weiter macht für eine ziemlich lesbare One-Liner 'bind_rows (df1, df2) [, Schnittpunkt (Namen (df1), Namen (df2))] - dies funktioniert mit dplyr :: bind_rows aber nicht rbind, weil bind_rows kombiniert verschiedene Spalten – epi99

Verwandte Themen