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

R语言如何按多列去重统计唯一Study_ID对应的Dose取值计数

按唯一Study_ID统计Dose取值频次的实现方法

你之前使用的n_distinct(data$Study_ID, data$Dose == "Yes")逻辑存在问题:n_distinct的作用是统计多列组合的唯一值个数,你传入的两个参数会被作为联合去重的依据,最终返回的是不同组合的总数量,无法直接实现分组计数的效果。

核心思路很简单:先按Study_ID去重,每个ID仅保留一条记录,再对Dose列做频次统计即可,你的示例数据中同一个重复Study_ID对应的Dose取值完全一致,去重时保留任意一条都不会影响统计结果。

dplyr 实现

library(dplyr)

# 输出表格形式的计数结果
data %>%
  distinct(Study_ID, .keep_all = TRUE) %>% # 按Study_ID去重,保留其余列
  count(Dose)

如果需要得到你示例中横向命名向量的输出格式,可以额外加一步转换:

data %>%
  distinct(Study_ID, .keep_all = TRUE) %>%
  count(Dose) %>%
  tibble::deframe()

运行结果完全匹配你的预期:

No Yes 
  4   3 

基础R实现

无需加载第三方包的实现方式如下:

# 提取非重复Study_ID对应的行
unique_data <- data[!duplicated(data$Study_ID), ]
# 统计Dose频次
table(unique_data$Dose)

注意:如果你的实际数据中存在同一个Study_ID对应不同Dose取值的情况,需要先明确按什么规则选取该ID对应的Dose值(比如取最早记录、取多数值等),再做去重统计,避免结果偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:21:32