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

如何在R中按分组统计变量各取值的出现次数及占比

报错原因

管道符%>%默认将前序输出作为下一个函数的第一个参数传入,你的代码等价于执行table(group_by(Patient1, Index), Majority_SNP),Majority_SNP是数据框内的列,不是全局环境中的独立变量,因此table函数无法识别对应对象。

解决方案

推荐用tidyverse体系函数直接生成你需要的比例宽表:

library(dplyr)
library(tidyr)

Pt1_Majority_SNP_Prop <- Patient1 %>%
  # 按Index、Majority_SNP分组计数
  count(Index, Majority_SNP, name = "count") %>%
  # 按Index分组计算各SNP占比
  group_by(Index) %>%
  mutate(proportion = count / sum(count)) %>%
  # 转换为宽表匹配目标输出结构
  select(-count) %>%
  pivot_wider(
    names_from = Majority_SNP,
    values_from = proportion,
    values_fill = 0,
    names_prefix = "Proportion "
  ) %>%
  # 调整列名、列顺序适配示例要求
  rename(`Proportion dash` = `Proportion -`) %>%
  select(Index, `Proportion A`, `Proportion G`, `Proportion C`, `Proportion T`, `Proportion dash`)

如果偏好base R实现,也可以用列联表方法:

# 生成Index与SNP的计数列联表
count_table <- xtabs(~ Index + Majority_SNP, data = Patient1)
# 按行计算相对频率
prop_table <- as.data.frame(prop.table(count_table, margin = 1))

得到结果后你可以直接用ggplot2等工具绘制对应的频率分布图表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:45:03