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

在R中提取每个唯一ID对应的属性值并支持均值计算

解决方法

针对你的需求,这里有两种简单可靠的方法提取每个参与者的唯一属性,且能直接用于后续统计计算:

方法1:使用distinct()快速去重

distinct()是dplyr里专门提取唯一行的函数,直接指定ID和需要保留的属性列,就能自动保留每个ID对应的唯一属性值:

library(dplyr)
# 提取每个ID对应的指定属性(可替换成你需要的其他属性列)
unique_participants <- df %>% 
  distinct(ID, age, birth_date, gender, .keep_all = FALSE)
  • 如果你需要保留所有属性列(仅去除重复的观测行),可以把.keep_all设为TRUE,只指定ID即可:
unique_participants <- df %>% 
  distinct(ID, .keep_all = TRUE)

方法2:group_by() + 提取唯一值

你之前用group_by()的思路没问题,但不需要用paste()——因为每个ID的属性是唯一的,直接用first()或unique()提取单个值即可:

unique_participants <- df %>% 
  group_by(ID) %>% 
  summarise(
    age = first(age),
    birth_date = first(birth_date),
    gender = first(gender),
    # 继续添加你需要的其他属性列
    .groups = "drop"  # 取消分组,方便后续操作
  )
  • .groups = "drop"能让结果回到普通数据框,避免后续统计时的分组干扰。

后续统计计算示例

拿到唯一属性数据框后,就能直接做均值等统计操作,比如计算不同性别的平均年龄:

gender_age_mean <- unique_participants %>% 
  group_by(gender) %>% 
  summarise(mean_age = mean(age, na.rm = TRUE))

你之前方法出现重复值的原因

每个ID对应多行观测,paste(age, collapse=",")会把同一ID下所有行的age(实际是同一个值)拼接成字符串,所以会出现25,25,25这类重复内容。改用first()或unique()就能直接拿到单个唯一值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:42:15