我有2个不同列长的数据帧。比如说,t.header = False
print t
+-------+----+
| Alice | 24 |
+-------+----+
| Bob | 19 |
+-------+----+
有3列(A,C,D),10行,df1
有5列(A,B,C,D,E),共3行。如何将它们合并在一起并从df2(B和E)中删除不匹配的列,只留下13行和3列A,C,D的df2
由于
答案 0 :(得分:5)
使用intersect
查找data.frames中的列,然后查找rbind
行。
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
答案 1 :(得分:1)
这使用dplyr bind_rows(仅仅因为我大量使用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