【发布时间】:2014-10-30 20:52:41
【问题描述】:
我正在尝试根据 data.table 中的单个列来总结(取平均值)。
这是我的数据和我使用的代码的玩具示例,显示了我遇到的问题:
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 无法做到这一点,我愿意接受其他建议。
【问题讨论】:
-
要忽略
NAs,您需要参数na.rm=TRUE。试试a[, lapply(.SD, mean, na.rm=TRUE), by=f, .SDcols=c(1:4)] -
啊。很简单。你能写出来吗?我给你积分
标签: r data.table mean na