【发布时间】:2017-08-11 09:20:29
【问题描述】:
我正在尝试“整理”一个大型数据集,其中将多个不同类型的数据合并到列中,并将一些数据合并到列名中。这是a common scenario in biological dataset。
我的数据表有重复的测量值,我想将其折叠成平均值。将数据转换为整洁的格式,这些复制值变成了额外的行。如果我尝试按几列聚合/分组并计算复制的平均值:
collapsed.data <- tidy.dt[, mean(expression, na.rm = T), by=list(Sequence.window,Gene.names,ratio,enrichment.type,condition)]
我得到一个结果表,其中仅包含 by 语句中使用的列,然后是 mean(expression) 作为列 V1。是否也可以获取所有其他(未更改的)列?
显示我想要实现的目标的极简示例如下:
library(data.table)
dt <- data.table(a = c("a", "a", "b", "b", "c", "a", "c", "a"), b = rnorm(8),
c = c(1,1,1,1,1,2,1,2), d = rep('x', 8), e = rep('test', 8))
dt[, mean(b), by = list(a, c)]
# a c V1
#1: a 1 -0.7597186
#2: b 1 -0.3001626
#3: c 1 -0.6893773
#4: a 2 -0.1589146
如您所见,d 和 e 列已删除。
【问题讨论】:
-
你也需要总结一下。即类似
dt[,.(mean(b), head(d, 1), head(e, 1)), by=list(a,c)] -
这是因为 data.table 无法知道您想要获取
d和e的哪些值,即对于a和b的每个组合,您可以有多个可能d和e中的值。您需要具体说明您想要的回报 -
通常我将要保留的列添加到
by参数中。
标签: r data.table