2016-03-24 211 views
-3

我有這樣計算累積平均值,其條件

a <- data.table(
    A = c(1:6), 
    B = c(1,2,2,3,4,2), 
    C = c("t","t","f","t","f","t") 
) 
    A B C 
1: 1 1 t 
2: 2 2 t 
3: 3 2 f 
4: 4 3 t 
5: 5 4 f 
6: 6 2 t 

一個data.table在每一行,我要計算所有以前行的平均值,但條件是它會排除一行C == f 。 結果應該是

A B C D E 
1: 1 1 t NA NA 
2: 2 2 t 1 1 
3: 3 2 f 1.5 1.5 
4: 4 3 t 1.5 1.5 
5: 5 4 f 3.5 3 
6: 6 2 t 3.5 3 

我該怎麼做?

+5

那麼你的預期結果是什麼? – Sotos

+0

@Jimbou這是一個data.table –

+0

您的預期輸出沒有意義。請添加您使用的公式。爲什麼行5:6的值是3.5和3?根據你的描述,它應該是2.333和2 –

回答

1

你的意思是累積的意思?然後這應該做你在問什麼:

a[C != "f", lapply(.SD, FUN = function(x) {cumsum(x)/seq_along(x)}), 
    .SDcols = c("A", "B")] 

      A B 
1: 1.000000 1.0 
2: 1.500000 1.5 
3: 2.333333 2.0 
4: 3.250000 2.0 
+3

當你甚至沒有對你的問題發表評論時,你的反對意見是什麼?根據OP提供的信息,這是他/她所要求的。 – matthias

+0

評論和downvoting的問題是復仇downvotes的可能性。儘管我不是downvoter。 – akrun

+2

對我而言,如果OP公佈了預期的產出,情況會更好。順便說一句,從'dplyr'有'cummean' – akrun