我的数据如下:
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))
我该怎么做?
答案 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)
希望这会有所帮助......