計算每個羣體的均值和方差無需編寫循環,這裏有一些方法
with(df, tapply(R, Population, function(x) c(mean(x), var(x))))
或者
aggregate(R ~ Population, df, function(x) c(mean(x), var(x)))
或者
do.call(rbind, by(df, df$Population, function(x) c(mean(x$R), var(x$R))))
或者
do.call(rbind, lapply(split(df, df$Population), function(x) c(mean(x$R), var(x$R))))
或者
library(data.table)
setDT(df)[, list(Var = var(R), Mean = mean(R)), by = Population]
或者
library(dplyr)
df %>%
group_by(Population) %>%
summarise(Var = var(R), Mean = mean(R))
如果你堅持要得到一個for
循環的解決方案,在這裏不用
的預定義的結果數據集(因爲它是一個不好的做法,在循環中不斷增長的對象)
Res <- data.frame(Population = unique(df$Population),
Mean = rep(NA, length(unique(df$Population))),
Var = rep(NA, length(unique(df$Population))))
運行循環
for(i in unique(df$Population)){
Res$Mean[Res$Population == i] <- mean(df$R[df$Population == i])
Res$Var[Res$Population == i] <- var(df$R[df$Population == i])
}
Res
# Population Mean Var
# 1 Bari1 108.6685 375.0275
爲什麼你想用循環做到這一點?如果'df'是你的數據集,你可以試試'with(df,tapply(R,Population,function(x)c(mean(x),var(x))))''或者'聚合(R〜Population,df,function(x)c(mean(x),var(x)))' – 2014-11-04 18:10:36
它的工作原理非常感謝 – user3792077 2014-11-04 18:18:58
爲什麼要使用for循環? – 2014-11-04 18:22:48