【发布时间】:2019-12-09 11:48:18
【问题描述】:
在df2 中,我想根据两个数据帧之间b 和c 列中的匹配记录来填补d 列中的空白。什么是一种快速而优雅的方式来做到这一点?重要的是要提到它应该适用于匹配行可能在两个数据帧中具有不同位置的情况。
df1 <- data.frame( a = c(1,1,1,1,1,2,2,2,2,2) ,b = rep(seq(41,45,1),each=2), c = c(101:105,101:105), d = LETTERS[seq( from = 1, to = 10 )])
df2 <- data.frame( a = c(1,1,1,1,1,2,2,2,2,2) ,b = rep(seq(41,45,1),each=2), c = c(101:105,101:105), d = c(LETTERS[seq( from = 1, to = 6 )],rep(NA,4)))
> df1
a b c d
1 1 41 101 A
2 1 41 102 B
3 1 42 103 C
4 1 42 104 D
5 1 43 105 E
6 2 43 101 F
7 2 44 102 G
8 2 44 103 H
9 2 45 104 I
10 2 45 105 J
> df2
a b c d
1 1 41 101 A
2 1 41 102 B
3 1 42 103 C
4 1 42 104 D
5 1 43 105 E
6 2 43 101 F
7 2 44 102 <NA>
8 2 44 103 <NA>
9 2 45 104 <NA>
10 2 45 105 <NA>
结果应该如下:
a b c d
1 1 41 101 A
2 1 41 102 B
3 1 42 103 C
4 1 42 104 D
5 1 43 105 E
6 2 43 101 F
7 2 44 102 G
8 2 44 103 H
9 2 45 104 I
10 2 45 105 J
【问题讨论】:
-
transform(df2, d = df1[match(paste(df2$b, df2$c), paste(df1$b, df1$c)), "d"]) -
这是完美的,谢谢@d.b
标签: r dataframe join indexing merge