给出以下两个示例数据框:
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))
如何使用A0dir
中的df2
值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
实际上,A0dir
要大得多,我试图避免完成联接,将B0dir
和df2
变量从df1
引入enumm
}。
答案 0 :(得分:1)
我们可以在match()
内使用mutate()
。
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