2016-03-27 9 views
0

の部分集合からの値を使用して突然変異:dplyrは、次の2つの例のデータフレームが与えられる別個のデータフレーム

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)) 

どのように私はdplyrで変異していた行のdf2$site == df1$sitedf2からA0dir値を使用できますか?

以下は動作しません。

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

以下は"site1"のための正しい答えを取得しますが、私はそれがすべてのサイトのために働く必要があります。

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

は、次の両方がdf1がはるかに大きいと私はdf2からdf1A0dirB0dir変数に持って参加完成避けるためにしようとしています、実際にはError: not compatible with STRSXP

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

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

生成します。

+0

や 'DF1%>%left_join(DF2)%>%に変異(DISP = A0dir + A0/B0)' –

答えて

1

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 
+0

素晴らしい仕事!ありがとうmtoto。 'paste()'を使って複数のマッチで作業しました。 – Clay

関連する問題