问题描述
我有以下两个 data.frame
。我想从 Grade
获取 D1
并分配给 Pts
中的 D
。操作完成后,D
data.frame
应该有 Pts
、Val
和 Grade
列,没有 C
或 Good
Grade
。
D <- data.frame(Pts= c("A","B","D"),Val = c(3.5,4,5))
D1 = data.frame(Pts = c("A","C",Grade = c("Ugly","Bad","Good","Excellent"))
D$Grade <- D1$Grade
解决方法
您可以使用左连接:
library(dplyr)
D %>%
left_join(D1,by="Pts")
,
我们可以在 data.table
中使用 join,方法是通过 'Pts' 列加入 on
并将 (:=
) 'Grade' 从 D1 分配到 D
library(data.table)
setDT(D)[D1,Grade := Grade,on = .(Pts)]
-输出
D
Pts Val Grade
1: A 3.5 Ugly
2: B 4.0 Bad
3: D 5.0 Excellent
在 base R
中,可以用 merge
或更快的 match
来做同样的事情
D$Grade <- D1$Grade[match(D$Pts,D1$Pts)]
代码行
D$Grade <- D1$Grade
由于多种原因无法工作
- 行数不一样
- 即使行数相同,两个数据集中的“Pts”也可能不匹配元素