2

我的数据如下所示:

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))/(总和(长度))

我该怎么做呢?

4

1 回答 1

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)

希望这可以帮助...

于 2015-01-22T02:38:30.780 回答