簡體   English   中英

如何在R中使用for循環

[英]How to use for loop in 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

我想檢索唯一的類並計算每個coverage列的平均值。

到目前為止,我已經完成了以下工作:

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

我想根據每個類檢索coverage值,然后計算平均值。 當我打印檢索到的coverage值時,我得到了一些行,而其他行卻丟失了!

有人可以幫我解決這個問題嗎

謝謝

您的代碼無法正常工作,因為,除其他外,您要分配每次迭代的平均值,而之前的迭代會丟失

有幾種方法可以做您想做的事情。 這是我的方法:

library(dplyr) 

data %>% group_by(CLASS) %>% summarise_all(mean)

使用aggregate另一種選擇

aggregate(data, . ~ CLASS , mean)

接受您的想法並將其包裝到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

這是我解決的方法:

coverage_all <- aggregate(coverage , list(class=data$CLASS), mean)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM