2017-02-20 99 views
0

這個問題是我發佈的前一個問題的延續,但我認識到,當我進行分組時,失敗。 link混合SDcols ifelse和分組變量

我需要計算變量的均值,每客戶符號分組,如果事務在一個特定時期發生。

我嘗試:

library(data.table) 
client_id <- c("A", "A", "B", "B", "B", "B", "B", "A", "A", "B", "B") 
value <- c(10, 35, 20, 30, 50, 40, 30, 40, 30, 40, 10) 
period_30 <- c(1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0) 
period_60 <- c(1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0) 
sign <- c("D", "D", "D", "D", "C", "C", "C", "D", "D", "D", "D") 

test <- data.frame(client_id, value, period_30, period_60, sign) 

result <- setDT(test)[, lapply(.SD, function(i) {ifelse(1 %in% i, mean(test$value), 0)}), 
        .SDcols = period_30:period_60, 
        by=.(client_id, sign)] 

有了結果我得到上面的代碼是廢話,但我相信,我是正確的軌道上。我只是不確定如何解決ifelse聲明。

預期的結果是

Client ID  average_value_period30 average_value_period60 
    A     22.5      29 

有人嗎?

+0

根據您顯示的數據,該'average_value_period60'爲22.5(如果我沒看錯)爲一的client_ID好 – akrun

回答

2

我們需要

setDT(test)[, lapply(.SD, function(i) 
    mean(value[i==1])) ,client_id, .SDcols = period_30:period_60] 
+0

,它給人意味着客戶端A爲34.1667期30。而這個客戶在第30期有兩個交易,價值10和35.所以它應該是45/2 = 22.5。例如,如果我拿總和來說,它在30期間爲客戶A提供了205,而它應該是45.我沒有得到它。 :S – Prometheus

+0

@Prometheus對於期間30,我也得到22.5 – akrun

+0

@Prometheus您是否使用更新版本的data.table?我正在使用1.10.0 – akrun