2017-10-04 33 views
0

假設我有兩個dataframes:計算操作的輸出的兩個dataframes之間有條件

set.seed(123) 
df1<-data.frame(rep=rep(1:4,each=360),parc=rep(1:40,each=36),trat=rep(sample(1:10),each=36),tree=rep(1:36,40),med=1,dap_prev=rnorm(1440, mean = 12)) 
df2<-data.frame(med=rep(1:18,each=10),trat=rep(sample(1:10)),b0=rnorm(180),b1=rnorm(180)) 

df2我需要時,他們符合標準df1$med == df2$meddf1$trat == df2$trat檢索的df2$b0df2$b1值。然後在df1中創建一個新列,其產品爲df2$b0 + df2$b1 * df1$dap_prev

我試着用下面這個命令,當然它沒有工作:

df1$ddap_cm <- df2$b0[df2$med == df1$med & df2$trat == df.1$trat] + df2$b1[df1$med == df2$med & df1$trat == df2$trat] * df1$dap_prev 
+0

你的代碼工作,使用'df1 $ trat'而不是'df.1 $ trat'。但我不知道它是否給你預期的結果。 – ANG

回答

0

我不知道我得到了你的權利,所以我建議這兩個步驟的答案

set.seed(123) 
df1<-data.frame(rep=rep(1:4,each=360),parc=rep(1:40,each=36),trat=rep(sample(1:10),each=36),tree=rep(1:36,40),med=1,dap_prev=rnorm(1440, mean = 12)) 
df2<-data.frame(med=rep(1:18,each=10),trat=rep(sample(1:10)),b0=rnorm(180),b1=rnorm(180)) 

### Answer 
library(dplyr) 
df1_v2 <- left_join(df1, df2, by = c("med", "trat")) # matching with "med" and "trat" 
df1_v2$ddap_cm <- df1_v2$b0 + (df1_v2$b1*df1_v2$dap_prev) # new variable 
str(df1_v2) 
相關問題