自定义 dcast fun.aggregate

dcast with custom fun.aggregate

我有这样的数据:

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

这是我想要的正确数据格式,但我想 fun.aggregate 不同。相反,我想取一个加权平均值,覆盖范围按长度加权:

(总和(ct_lt))/(总和(长度))

我该怎么做?

披露:我前面没有 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)

希望这对您有所帮助...