2015-02-23 67 views
0

我想按某列的數據進行分組,然後用最近的觀察來替換NA。有什麼方法可以將聚合函數以外的函數應用於group_by的結果?如何將自定義函數應用於group_by的結果

這裏是ddply實現兩個樣本:

1:

dt<-data.table(A=rep(c(1:3),2), B=c(1,2,NA,NA,2,5),C=c(9,NA,2,8,NA,4) 
ddply(dt,"A",function(x){na.locf(x, na.rm = FALSE,fromLast=FALSE)}) 

2:

ddply(dt,"A",function(x){ 
if (x[1,"A"]>2){ 
    x[,2:3]*1 
} else { 
    x[,2:3]*(-1) 
} 

}) 

我不知道如何與groug_by這應該是更快的複製它比ddply。順便說一下,是否有任何NA替換函數比na.locf更快?

非常感謝提前。

回答

3

這裏,如果你已經使用data.table你會怎麼做這與dplyr

dt %>% 
    group_by(A) %>% 
    mutate_each(funs(na.locf(., na.rm = FALSE, fromLast = FALSE))) 

但是,爲什麼不使用它呢?

dt[, lapply(.SD, na.locf, na.rm = FALSE, fromLast = FALSE), by = A] 

您可以通過使用:=操作參考在

dt[, names(dt)[-1] := lapply(.SD, na.locf, na.rm = FALSE, fromLast = FALSE), A] 
+0

感謝您的回答也更新數據表。如果我們在data.table中使用,我們可以執行if-else條件嗎?在這個例子中,如果A == 1,則計算其他運行標準偏差。 @大衛阿倫堡 – YYY 2015-02-23 22:41:50

相關問題