我如何R中
问题描述:
使用for循环有一个CSV数据集(称之为data
)如下:我如何R中
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_all <- aggregate(coverage , list(class=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
答
您的代码不工作,因为,除其他事项外,您要指派给平均每个迭代和以前丢失
有几种方法做你正在尝试做的。这将是我的做法:
library(dplyr)
data %>% group_by(CLASS) %>% summarise_all(mean)
答
使用aggregate
aggregate(data, . ~ CLASS , mean)
哎呀,试图'骨料(CoverageT1 + CoverageT2 + CoverageT3〜CLASS ,data = xy,FUN = mean)'并且它不起作用。没有想到使用点符号... –
如果左侧有多个变量,则可以执行cbind。 '聚合(cbind(CoverageT1,CoverageT2,CoverageT3)〜CLASS,data = xy,FUN = mean)'在这种情况下,当使用所有变量时,点符号也适用。 –