如何在R

时间:2016-11-20 18:23:29

标签: r

我有一个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

我想根据每个类检索覆盖率值,然后计算平均值。当我打印检索到的覆盖值时,我会得到一些行,而另一行则丢失了!

有人可以帮我解决这个问题

由于

4 个答案:

答案 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)