dplyr 使用来自单独数据框子集的值进行变异

dplyr mutate using value from a subset of separate data frame

给定以下两个示例数据框:

set.seed(2299)
df1 <- data.frame(site = c("site1","site1","site1","site2","site2","site2"),
                  A0 = rnorm(6),B0 = rnorm(6))
df2 <- data.frame(site = c("site1", "site2"),
                  A0dir = c(220, 110), B0dir = c(310,200))

我如何使用 df2 中的 A0dir 值,其中 df2$site == df1$site 在我用 dplyr 变异的行中?

以下无效。

df1 %>% 
      mutate(disp = df2$A0dir[site == df2$site] + A0/B0)

以下是 "site1" 的正确答案,但我需要它适用于所有站点。

df1 %>% 
      mutate(disp = df2$A0dir["site1" == df2$site] + A0/B0)

以下都产生 Error: not compatible with STRSXP

df1 %>% 
      mutate(disp = subset(df2, site == .$site, select = A0dir))    

df1 %>% 
      mutate(disp = subset(df2, site == "site1", select = A0dir))

实际上,df1 大得多,我试图避免完成连接以将 df2 中的 A0dirB0dir 变量引入 df1.

我们可以在 mutate() 中使用 match()

df1 %>% mutate(disp = df2$A0dir[match(site, df2$site)] + A0/B0)
#   site         A0         B0     disp
#1 site1 -1.5784780  0.1712790 210.7842
#2 site1  1.0957047  0.6394951 221.7134
#3 site1 -1.3443118  0.1814845 212.5927
#4 site2  1.0674512  0.7809774 111.3668
#5 site2  1.3821173  1.7001376 110.8129
#6 site2 -0.1283199 -0.7093244 110.1809