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

Assign grading based on available data in R data.frame?

我有以下两个data.frame。我想从 D1 中获取 Grade 并分配给 D 中的 Pts。操作完成后,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","B","C", "D"), Grade = c("Ugly", "Bad", "Good", "Excellent"))

D$Grade <- D1$Grade

我们可以通过 'Pts' 列连接 on 来在 data.table 中使用连接,并将 D1 中的 'Grade' 分配 (:=) 到 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'也可能不匹配元素

您可以使用左连接:

library(dplyr)

D %>%
  left_join(D1, by="Pts")