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

在R语言中如何计算某列含指定值的案例占比?

解决方案

这里有几种更简洁的方法来计算目标占比:

方法一:使用dplyr(简洁版)

利用group_by()分组后,直接用any()判断每组是否存在"A",最后用mean()计算占比:

library(dplyr)

mock %>%
  group_by(case_id) %>%
  summarise(has_A = any(characteristic == "A", na.rm = TRUE)) %>%
  summarise(prop_A = mean(has_A))

逻辑说明

  • group_by(case_id):按案例ID分组
  • any(characteristic == "A", na.rm = TRUE):判断每组中是否存在值为"A"的记录,na.rm = TRUE忽略NA的干扰(比如示例中的case5包含NA和"A",仍会被判定为符合条件)
  • mean(has_A):逻辑值TRUE会被当作1,FALSE当作0,直接取均值就是符合条件的案例占比

方法二:dplyr更精简写法

甚至可以合并步骤,进一步简化:

mock %>%
  group_by(case_id) %>%
  summarise(has_A = any(characteristic == "A", na.rm = TRUE)) %>%
  pull(has_A) %>%
  mean()

方法三:Base R实现

不需要加载dplyr,用tapply也能快速完成:

# 按case_id分组判断每组是否有"A"
has_A_groups <- tapply(mock$characteristic, mock$case_id, function(x) any(x == "A", na.rm = TRUE))
# 计算占比
mean(has_A_groups)

以上三种方法都能得到示例中的3/5(即0.6)的结果,比多函数组合的写法更简洁直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:02:32