在R中为指定组(A组排除0值)计算列均值的方法
分组计算均值并添加到原数据集(R语言实现)
原始数据集
W X Y Z A_rep1 0 15 10 2 A_rep2 2 14 4 8 A_rep3 15 0 8 22 A_rep4 18 3 0 9 A_rep5 0 12 0 22 B_rep1 13 0 12 80 B_rep2 14 2 10 45 B_rep3 15 10 12 36 B_rep4 89 18 22 78 B_rep5 0 22 16 0 C_rep1 15 0 12 0 C_rep2 12 0 17 5 C_rep3 22 4 50 47 C_rep4 0 14 0 0 C_rep5 0 5 4 12
需求说明
- 对A组的每列计算排除0值后的均值
- 对B、C组使用所有重复样本计算列均值
- 将各组均值作为新行添加到原数据集
R语言实现步骤
1. 读取原始数据
将数据读入R环境:
data <- read.table(text = " W X Y Z A_rep1 0 15 10 2 A_rep2 2 14 4 8 A_rep3 15 0 8 22 A_rep4 18 3 0 9 A_rep5 0 12 0 22 B_rep1 13 0 12 80 B_rep2 14 2 10 45 B_rep3 15 10 12 36 B_rep4 89 18 22 78 B_rep5 0 22 16 0 C_rep1 15 0 12 0 C_rep2 12 0 17 5 C_rep3 22 4 50 47 C_rep4 0 14 0 0 C_rep5 0 5 4 12 ", header = TRUE, row.names = 1)
2. 分组提取数据
按行名前缀提取A、B、C三组数据:
A_data <- data[grepl("^A_rep", rownames(data)), ] B_data <- data[grepl("^B_rep", rownames(data)), ] C_data <- data[grepl("^C_rep", rownames(data)), ]
3. 计算各组均值
- A组:排除0值后计算列均值
- B、C组:直接计算所有样本的列均值
# A组均值(排除0值) mean_A <- apply(A_data, 2, function(x) mean(x[x != 0])) # B组均值 mean_B <- colMeans(B_data) # C组均值 mean_C <- colMeans(C_data)
4. 转换格式并合并到原数据
将均值向量转为数据框,设置行名后合并到原始数据集:
# 转换为数据框并命名行 mean_A_df <- as.data.frame(t(mean_A)) rownames(mean_A_df) <- "Mean_A" mean_B_df <- as.data.frame(t(mean_B)) rownames(mean_B_df) <- "Mean_B" mean_C_df <- as.data.frame(t(mean_C)) rownames(mean_C_df) <- "Mean_C" # 合并所有数据 final_data <- rbind(data, mean_A_df, mean_B_df, mean_C_df)
5. 查看最终结果
print(final_data, digits = 2)
输出结果:
W X Y Z A_rep1 0.00 15.0 10.00 2.00 A_rep2 2.00 14.0 4.00 8.00 A_rep3 15.00 0.0 8.00 22.00 A_rep4 18.00 3.0 0.00 9.00 A_rep5 0.00 12.0 0.00 22.00 B_rep1 13.00 0.0 12.00 80.00 B_rep2 14.00 2.0 10.00 45.00 B_rep3 15.00 10.0 12.00 36.00 B_rep4 89.00 18.0 22.00 78.00 B_rep5 0.00 22.0 16.00 0.00 C_rep1 15.00 0.0 12.00 0.00 C_rep2 12.00 0.0 17.00 5.00 C_rep3 22.00 4.0 50.00 47.00 C_rep4 0.00 14.0 0.00 0.00 C_rep5 0.00 5.0 4.00 12.00 Mean_A 11.67 10.7 7.33 15.25 Mean_B 26.20 10.4 14.40 47.80 Mean_C 9.80 4.6 16.60 12.80
内容的提问来源于stack exchange,提问作者Reda
相关产品推荐
相关产品推荐

