我有一个CSV数据集(称之为data
),如下所示:
CLASS CoverageT1 CoverageT2 CoverageT3
Gamma 90 80 75
Gamma 89 72 79
Gamma 92 86 75
Alpha 50 80 67
Alpha 53 78 60
Alpha 58 81 75
我想检索唯一的类并计算每个覆盖列的平均值。
到目前为止我所做的是以下内容:
classes <- subset(data, select = c(CLASS))
unique_classes <- unique(classes)
for(x in unique_classes){
cove <- subset(data, CLASS == x , select=c(CoverageT1:CoverageT3))
average <- colMeans(cove)
print(cove)
}
结果,我得到了以下结果:
CoverageT1 CoverageT2 CoverageT3
1 90 80 75
3 92 86 75
4 50 80 67
6 58 81 75
我想根据每个类检索覆盖率值,然后计算平均值。当我打印检索到的覆盖值时,我会得到一些行,而另一行则丢失了!
有人可以帮我解决这个问题
由于
答案 0 :(得分:4)
您的代码无法正常工作,因为除其他事项外,您在每次迭代时分配平均值并且之前丢失了
有几种方法可以做你想做的事情。这将是我的方法:
library(dplyr)
data %>% group_by(CLASS) %>% summarise_all(mean)
答案 1 :(得分:4)
使用aggregate
aggregate(data, . ~ CLASS , mean)
答案 2 :(得分:2)
将你的想法包装在by
。
xy <- read.table(text = "CLASS CoverageT1 CoverageT2 CoverageT3
Gamma 90 80 75
Gamma 89 72 79
Gamma 92 86 75
Alpha 50 80 67
Alpha 53 78 60
Alpha 58 81 75", header = TRUE)
out <- by(data = xy[, -1], INDICES = list(xy$CLASS), FUN = colMeans)
out <- do.call(rbind, out)
out
CoverageT1 CoverageT2 CoverageT3
Alpha 53.66667 79.66667 67.33333
Gamma 90.33333 79.33333 76.33333
答案 3 :(得分:1)
这就是我解决它的方法:
coverage_all <- aggregate(coverage , list(class=data$CLASS), mean)