R语言使用for循环生成t检验均值差向量的实现方法
问题原因
你当前的代码在每次循环迭代时都会直接覆盖m对象,所以循环结束后m只会保留最后一个分组的计算结果。同时代码中重复调用了两次t.test计算同一个分组的结果,属于不必要的冗余计算。
修正后的for循环实现
set.seed(1) e <- data.frame(tti = log2(runif(200)), corona = c(rep("Corona", 100), rep("Before", 100)), type = rep(c("A", "B", "C", "D"))) # 初始化空向量存储结果,同时保留分组名方便后续核对 m <- c() for(i in unique(e$type)){ # 单次计算t检验结果,避免重复运算 t_result <- t.test(e$tti[e$type == i] ~ e$corona[e$type == i]) # 计算差值并追加到结果向量 m[i] <- round(1 - 2^(t_result$estimate[2] - t_result$estimate[1]), digits = 3) * 100 }
运行后输出m即可得到所有分组的计算结果:
> m A B C D 24.7 10.5 1.5 28.7
可选的非循环实现(适合更复杂的分组统计场景)
如果后续需要扩展统计维度,可以用dplyr的分组语法实现,代码可读性更高:
library(dplyr) e %>% group_by(type) %>% summarise(diff = round(1 - 2^(mean(tti[corona == "Before"]) - mean(tti[corona == "Corona"])), 3)*100)
内容的提问来源于stack exchange,提问作者cmirian
相关产品推荐
相关产品推荐

