我有一個大的data.frame
,其中有character
列和幾個包含NA
的數字列。使用data.table與NAs彙總數據幀
這裏有幾個例子行:
df <- data.frame(id=rep("A",3),v1=c(NA,1,NA),v2=c(2,5,2),v3=c(NA,NA,NA),V4=c(0,0,0),stringsAsFactors=F)
由於df$id
重複我想aggregate
df
由df$id
,並申請sum
所有其他列。
我這樣做:
require(data.table)
setDT(df)[,lapply(.SD, function(x) sum(x,na.rm=T)),by=.(id)]
,並正在此:
id v1 v2 v3 V4
1: A 1 9 0 0
所以列v3
是df
所有NA
的,因此得到的0
的值,這對一個問題因爲在這種情況下,我想保持NA
的價值,但在所有其他情況下(其中聚合是通過混合數字和NA
的,顯然我想刪除否則總和將爲NA
)。如示例所示(df$v4
),我的列全部爲0
,因此我不能簡單地將0
的全部替換爲的NA
。
換句話說,這是我想要的結果:
id v1 v2 v3 V4
1: A 1 9 NA 0
任何想法如何獲得data.table
的.SD
聚集到實現這一目標?
不是'data.table'問題:'總和(C(NA,NA,NA),na.rm = TRUE)'返回'0',因爲*「空集合的總和爲零,根據定義」。* – Cath
編寫自己的函數mySum < - 函數(x)if(all(is.na(x)))NA else sum x,na.rm = TRUE)' – jogo