如何将分组后的data.frame转换为matrix并解决列重命名问题
解决分组计数列重命名与宽格式转换问题
首先,咱们先搞定分组后计数列的重命名问题——其实在summarize步骤直接指定列名就好,完全不用等生成无名列再折腾:
# 直接在summarize里给计数列命名,同时取消分组状态更方便后续操作 groupbyDf <- Df %>% filter(----) %>% # 替换成你的实际过滤条件 select(x, y) %>% group_by(x, y) %>% summarize(count = n(), .groups = "drop")
如果已经生成了列名为n()的groupbyDf,也可以事后快速重命名:
groupbyDf <- groupbyDf %>% rename(count = `n()`)
接下来是转换成你要的matrixXY宽格式,用tidyr::pivot_wider就能轻松实现,缺失的组合自动填充0:
library(tidyr) matrixXY <- groupbyDf %>% pivot_wider( id_cols = x, # 以x作为行维度 names_from = y, # 以y的取值作为列名 values_from = count, # 单元格填充计数结果 values_fill = 0 # 没有匹配的组合默认填0 )
这样得到的matrixXY就是你想要的结构:
y1 y2
x1 5 0
x2 6 3
x3 4 0
最后提个绘图小建议:如果用ggplot2绘图,其实长格式的groupbyDf反而更方便直接用geom_tile或geom_point这类图层;如果一定要用宽格式矩阵,也可以用heatmap这类基础绘图函数。
内容的提问来源于stack exchange,提问作者Antoine
相关产品推荐
相关产品推荐

