在R中合并不相等的数据帧并删除不匹配的列

时间:2017-04-12 16:06:52

标签: r merge

我有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

由于

2 个答案:

答案 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