我試圖基於data.table中的單個列對各列進行總結(取平均值)。data.table按列列出時給出NA
這裏是我的數據的玩具例子,我使用的代碼,顯示我有問題:
library(data.table)
a<- data.table(
a=c(1213.1,NA,113.41,133.4,121.1,45.34),
b=c(14.131,NA,1.122,113.11,45.123,344.3),
c=c(101.2,NA,232.1,194.3,12.12,7645.3),
d=c(11.32,NA,32.121,94.3213,1223.1,34.1),
e=c(1311.32,NA,12.781,13.2,2.1,623.2),
f=c("A", "B", "B", "A", "B", "X"))
a
setkey(a,f) # column "f" is what I want to summarize columns by
a[, lapply(.SD, mean), by=f, .SDcols=c(1:4)] # I just want to summarize first 4 columns
最後一行的輸出:
> a[, lapply(.SD, mean), by=f, .SDcols=c(1:4)]
f a b c d
1: A 673.25 63.6205 147.75 52.82065
2: B NA NA NA NA
3: X 45.34 344.3000 7645.30 34.10000
爲什麼爲B項NA
?在計算平均值時不應忽略NA
?我想我發現了一個類似的問題here,但也許這是不同的和/或我已經弄亂了語法。
如果這在data.table
不可能,我接受其他建議。
要忽略'NA's,你所需要的參數'na.rm = TRUE'。試試'[,lapply(.SD,mean,na.rm = TRUE),by = f,.SDcols = c(1:4)]' – ialm 2014-10-30 20:55:20
啊。很簡單。你能寫出來嗎?我會給你點 – Prophet60091 2014-10-30 20:57:28