dcast与自定义fun.aggregate

时间:2015-01-22 01:45:12

标签: r casting reshape reshape2 melt

我的数据如下:

sample start end gene coverage
X      1     10  A    5
X      11    20  A    10
Y      1     10  A    5
Y      11    20  A    10
X      1     10  B    5
X      11    20  B    10
Y      1     10  B    5
Y      11    20  B    10

我添加了其他列:

data$length <- (data$end - data$start + 1)

data$ct_lt <- (data$length * data$coverage)

我使用dcast重新格式化了我的数据:

casted <- dcast(data, gene ~ sample, value.var = "coverage", fun.aggregate = mean)

所以我的新数据看起来像这样:

gene    X       Y
A      10.00000 10.00000
B      38.33333 38.33333

这是我想要的正确数据格式,但我想要有趣。不同地聚合。相反,我想采用加权平均值,覆盖率按长度加权:

(sum(ct_lt))/(sum(length))

我该怎么做?

1 个答案:

答案 0 :(得分:1)

披露:在我面前没有R,但我认为你的朋友可能是dplyr和tidyr套餐。

当然有很多方法可以实现这一目标,但我认为以下内容可能会让你开始

library(dplyr)
library(tidyr)

data %>%
select(gene, sample, ct_lt, length) %>%
group_by(gene, sample) %>%
summarise(weight_avg = sum(ct_lt) / sum(length)) %>%
spread(sample, weight_avg)

希望这会有所帮助......