You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dplyr创建多行汇总表:植物基因型-环境数据分组需求

用dplyr实现植物基因型-环境观测数据的多行/多维度汇总

没问题!我来一步步教你用dplyr搞定这个植物基因型-环境的汇总表,完全适配你的多观测场景~

首先先补全你的示例数据(给你加了一个模拟的性状列,让后续汇总更贴近实际需求):

library(tibble)
library(dplyr)
library(tidyr) # 用到宽转窄/窄转宽时需要

# 生成符合要求的示例数据
nObs <- 500 
data <- tibble(
  Gt = sample(sprintf("%02d", 1:20), nObs, replace = TRUE), 
  Env = sample(LETTERS[1:8], nObs, replace = TRUE),
  PlantHeight = rnorm(nObs, mean = 150, sd = 10) # 模拟一个测量性状,可选
)

接下来根据不同的汇总需求,给你三种常用的实现方式:


方式1:紧凑式单基因型一行汇总

适合快速查看每个基因型的整体环境覆盖情况,包含总观测数、涉及环境列表、各环境观测频次:

compact_summary <- data %>%
  group_by(Gt) %>%
  summarise(
    总观测数 = n(),
    涉及环境列表 = paste(unique(Env), collapse = ", "), # 拼接所有出现过的环境
    各环境观测次数 = list(table(Env)) # 用列表存储详细的环境频次表
  ) %>%
  ungroup()

# 查看前6条结果
head(compact_summary)

说明:list(table(Env))会保留每个环境的具体观测次数,你可以通过compact_summary$各环境观测次数[[1]]查看第一个基因型的环境频次明细。


方式2:宽格式对比汇总

适合直观对比不同基因型在各环境的观测分布,每个环境作为单独一列,无观测的环境填0:

wide_summary <- data %>%
  count(Gt, Env) %>% # 先统计基因型-环境组合的观测数
  pivot_wider(
    names_from = Env,
    values_from = n,
    values_fill = 0 # 没有观测的环境填充0
  ) %>%
  mutate(总观测数 = rowSums(across(where(is.numeric)))) # 追加总观测数列

# 查看前6条结果
head(wide_summary)

说明:这种格式非常适合做后续的可视化(比如热图),能一眼看出基因型的环境偏好。


方式3:明细式多行汇总

适合需要深入分析每个基因型下各环境的观测细节,比如环境内的性状统计、环境占比:

detailed_summary <- data %>%
  group_by(Gt, Env) %>%
  summarise(
    环境内观测数 = n(),
    性状均值 = round(mean(PlantHeight), 2), # 计算该环境下的性状均值(保留2位小数)
    .groups = "drop_last" # 保留基因型分组,方便计算总览指标
  ) %>%
  mutate(
    基因型总观测数 = sum(环境内观测数),
    环境观测占比 = round(环境内观测数 / 基因型总观测数, 3) # 计算该环境占基因型总观测的比例
  ) %>%
  ungroup()

# 查看前6条结果
head(detailed_summary)

说明:这种多行格式可以直接用于后续的统计建模(比如基因型-环境互作分析),信息维度最丰富。


你可以根据自己的后续需求选择对应的汇总方式,如果还有更具体的统计指标要加,直接在summarise或mutate里追加即可~

内容的提问来源于stack exchange,提问作者akraf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:46:44