自定义 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)
希望这对您有所帮助...
我有这样的数据:
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)
希望这对您有所帮助...