根据 R data.frame 中的可用数据分配评分?

问题描述

我有以下两个 data.frame。我想从 Grade 获取 D1 并分配给 Pts 中的 D。操作完成后,D data.frame 应该有 PtsValGrade 列,没有 CGood 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

由于多种原因无法工作

  1. 行数不一样
  2. 即使行数相同,两个数据集中的“Pts”也可能不匹配元素