我正在尝试计算大数据表中的行均值,例如
set.seed(1)
DT <- data.table(a = rnorm(4000000), b = rnorm(4000000), c = rnorm(4000000),
d = rnorm(4000000), e = rnorm(4000000))
它还包含随机NA和许多具有完整NA的行(我不知道如何在上面的示例中随机插入这些内容)。
我使用以下代码来计算行总和:
DT[,sums:= rowMeans(.SD,na.rm=T)]
但这需要几分钟。 有没有办法优化这个代码/比rowMeans更快的解决方案?
答案 0 :(得分:0)
关于@Seymour评论和我的。
比较data.table和matrix:
require(rbenchmark)
require(data.table)
#Sample data
set.seed(1)
DT_df <- data.table(a = rnorm(4000000), b = rnorm(4000000), c = rnorm(4000000),
d = rnorm(4000000), e = rnorm(4000000))
set.seed(1)
DT_Matrix <- matrix(rexp(2e+07, rate=.1), ncol=5)
#Benchmark
benchmark("data.table" = {
DT_df[,sums:= rowMeans(.SD,na.rm=T)]
},
"Matrix" = {
cbind(DT_Matrix, rowMeans(DT_Matrix, na.rm=T))
},
replications = 1000,
columns = c("test", "replications", "elapsed",
"relative", "user.self", "sys.self"))
结果:
test replications elapsed relative user.self sys.self
1 data.table 1000 264.30 1.146 254.08 7.78
2 Matrix 1000 230.64 1.000 213.72 16.29