R语言如何将三列dataframe转换为按分组求第三列均值的矩阵
解决方案
方法1:基础R实现(无需额外安装包,推荐)
直接使用tapply函数分组聚合后直接生成矩阵:
# 第一个参数是要计算的数值列,第二个参数是行、列分组的列表,第三个参数是聚合函数 mat <- tapply(df$count, list(df$B, df$A), FUN = mean)
运行后直接得到预期结构的矩阵,输出如下:
A1 A2 B1 1.5 3.5 B2 5.5 7.5
方法2:tidyverse生态实现(可读性高,适合复杂处理场景)
先分组计算均值,再转换为宽表后转矩阵:
library(tidyverse) mat <- df %>% # 按前两列分组计算均值 group_by(B, A) %>% summarise(mean_val = mean(count), .groups = "drop") %>% # 长表转宽表,A列的唯一值作为新列 pivot_wider(names_from = A, values_from = mean_val) %>% # 将B列设为行名 column_to_rownames("B") %>% # 转换为矩阵格式 as.matrix()
方法3:reshape2包dcast实现
library(reshape2) # dcast直接指定行、列、聚合规则,再转换为矩阵 mat <- dcast(df, B ~ A, value.var = "count", fun.aggregate = mean) %>% column_to_rownames("B") %>% as.matrix()
内容的提问来源于stack exchange,提问作者Geeth Lochana
相关产品推荐
相关产品推荐

