我在将摘要功能的输出打印到文件时出错。我有一个具有三个因子级别的列“bin”,并希望为每个级别返回5个数字摘要。五个数字摘要打印到屏幕但不会写入文件?我有错误报告
清空1:col
的data.table(0行)
数据:
A B info C bin
1: 10-60494 0.66392100 0.001833330 1 MAF0.01
2: rs148087467 0.35274000 0.000716240 1 MAF0.01
3: rs187110906 0.40586900 0.004488040 1 MAF0.01
4: rs192025213 0.00743299 0.000000000 1 MAF0.01
5: rs115033199 0.32829300 0.000614316 1 MAF0.01
6: rs183305313 0.51721200 0.002892520 1 MAF0.01
s <- df2[, print(summary(info)), by='bin']
print(s)
write.table(as.data.frame(s),
quote=FALSE,file=paste(i,"sum_out.txt",sep=''))
输出继电器:
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.0009998 0.0371300 0.2016000 0.2700000 0.4477000 1.0000000
答案 0 :(得分:2)
您获得零行的原因是因为您在j
中唯一要做的就是打印summary
命令的结果。
考虑以下示例数据:
set.seed(2018)
dt <- data.table(bin = rep(c('A','B'), 5), val = rnorm(10,3,1))
现在你做的时候(就像你的问题一样):
s <- dt[, print(summary(val)), by = bin]
摘要统计信息将打印到控制台,但会导致空 data.table :
> s <- dt[, print(summary(val)), by = bin] Min. 1st Qu. Median Mean 3rd Qu. Max. 2.389 2.577 2.936 3.547 4.735 5.099 Min. 1st Qu. Median Mean 3rd Qu. Max. 1.450 2.735 3.271 2.991 3.637 3.863 > s Empty data.table (0 rows) of 1 col: bin
删除print
- 命令无效:
> dt[, summary(val), by = bin] bin V1 1: A 2.389 2: A 2.577 3: A 2.936 4: A 3.547 5: A 4.735 6: A 5.099 7: B 1.450 8: B 2.735 9: B 3.271 10: B 2.991 11: B 3.637 12: B 3.863
因为summary
返回一个表对象,该对象被data.table
处理为向量。
不应使用print
,而应使用as.list
将summary
的元素作为 data.table 中的列:
s <- dt[, as.list(summary(val)), by = bin]
现在,摘要统计信息包含在生成的 data.table :
中> s bin Min. 1st Qu. Median Mean 3rd Qu. Max. 1: A 2.389413 2.577016 2.935571 3.547351 4.735284 5.099471 2: B 1.450122 2.735289 3.270881 2.991340 3.637056 3.863351
由于摘要统计信息存储在非空 data.table s
中,因此您可以将s
写入文件,例如fwrite
(快速写入函数data.table
- 包)。
答案 1 :(得分:0)
这可以使用sapply()
来实现 - 这是使用虹膜数据框的示例:
levels <- unique(iris$Species)
result <- data.frame(t(sapply(levels, function (x) summary(subset(iris, Species == levels[x])$Petal.Width))))
> result
Min. X1st.Qu. Median Mean X3rd.Qu. Max.
1 0.1 0.2 0.2 0.246 0.3 0.6
2 1.0 1.2 1.3 1.326 1.5 1.8
3 1.4 1.8 2.0 2.026 2.3 2.5