将数据填充到 df 时出现问题

Issue when populating data into df

我正在尝试通过将其中一列中的值与第二个数据帧进行匹配来在数据帧中创建一个新列。我已经在代码的其他部分使用了这种方法,但现在我无法让它工作。

一些示例数据:

df <- data.frame(a=c("d","c","f","r","t","w"),b=c("A01","B02","B02","C04","A01","C02"))
df
  a   b
1 d A01
2 c B02
3 f B02
4 r C04
5 t A01
6 w C02

ECOdf <- data.frame(ECO=c("A01","B02","C04","C02"),ECO.description=c("opening1","opening2","otherOpening","lastOpening"))
ECOdf
ECO ECO.description
1 A01        opening1
2 B02        opening2
3 C04    otherOpening
4 C02     lastOpening

现在,我试图通过将 df$b 与 ECOdf$ECO 匹配,在 df 中创建一个新列,其中填充了来自 ECOdf$ECO.description 的值。在代码的其他部分,我使用了以下内容(使用不同的 df 和变量,我更新了变量名称以适合此示例):

df$desc <- ECOdf$ECO[df$b]

而且我没有错误,但是新列中填满了 NA:

df
a   b desc
d A01 <NA>
c B02 <NA>
f B02 <NA>
r C04 <NA>
t A01 <NA>

我期待这样的事情:

df
a   b desc
d A01 opening1
c B02 opening2
f B02 opening2
r C04 otherOpening
t A01 opening1

有人知道逻辑错误在哪里吗?我已经检查了 class 和 df$b 和 ECOdf$ECO 的类型,它们都是“字符”,所以我不知道为什么新列没有填充预期值

也许使用联接更容易?

colnames(df)[2] = "ECO"
dplyr::left_join(df, ECOdf)
Joining, by = "ECO"
  a ECO ECO.description
1 d A01        opening1
2 c B02        opening2
3 f B02        opening2
4 r C04    otherOpening
5 t A01        opening1
6 w C02     lastOpening