簡體   English   中英

有條件地加入DPLYR

[英]Conditional Join with DPLYR

我試圖通過一個變量連接兩個數據框,該變量具有不同的名稱和源中的單個條件標准(即年份)。

調查各種解決方案並沒有給我一個答案。

數據

x_6.0_2011 <- data.frame(t = c("1", "2", "3", "7"), value_1 = c("0.9", "0.6", "0.1", "0.8"))

x <- data.frame(year = c("2010", "2011", "2012", "2013"), t.nr = c("1", "1", "2", "7"), value = c("0.2", "0.5", "0.7", "0.3"))

我嘗試了什么:

x2011 <-   ifelse(x$year == '2011', 
                  left_join(x, x_6.0_2011, by = c('t.nr' = 't')), 0)

- >生成一個列表 - 所以錯誤的解決方案路徑

x20111 <- left_join(x, x_6.0_2011, by = c('t.nr' = 't'), ,year== 2011 )

- >生成一個df但只替換正確的值並在x_6.0_2011中的余數中進行加密 - 所以錯誤的解決方案路徑

xx_6.02011 <- left_join(filter(x, year == '2011'), x_6.0_2011, by = c('t.nr' = 't'))

- >用一行生成df,但我希望保留其他不包含任何值的條目

結果預期:

Yr       t.nr   value  value_1
2010     1       0.2    0
2011     1       0.3    0.9
2012     2       0.7    0
2013     7       0.3    0

......或者至少在最后一欄中是類似的,而不是我無法推斷的價值。

最小的例子工作,但我的工作項目(217變量)仍然產生一個錯誤:

我一直得到: 錯誤:data_frames只能包含1d原子向量和列表

任何建議都不僅僅是值得贊賞。 或者我的嘗試是否過於簡單?

您可以使用devel版本的data.table

library(data.table)#v1.9.5+
setDT(df1)[df2, on=c('t'='t.nr')][year!=2011, value_1:='0'][]
#    t value_1 year value
#1: 1       0 2010   0.2
#2: 1     0.9 2011   0.5
#3: 2       0 2012   0.7
#4: 7       0 2013   0.3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM