如何在R中基于唯一参与者计算水果选择占比?
解决方案:计算每种水果的参与者选择占比
核心思路是先统计每种水果被多少不同参与者选择,再除以总参与者数量,而非总选择次数。以下是两种实现方式:
方法1:使用dplyr包
library(dplyr) # 计算总参与者数量 total_participants <- n_distinct(data$id) # 生成结果 fruit_participant_ratio <- data %>% distinct(id, fruit) %>% # 去重:保留每个参与者选过的唯一水果记录 count(fruit, name = "participant_count") %>% # 统计每个水果的参与者数 mutate(ratio = participant_count / total_participants) # 计算占比 print(fruit_participant_ratio)
输出结果:
fruit participant_count ratio 1 apple 3 1.0000000 2 grapefruit 1 0.3333333 3 grapes 1 0.3333333 4 orange 2 0.6666667 5 pear 2 0.6666667
方法2:使用Base R
无需加载额外包即可实现:
# 提取每个参与者与水果的唯一组合 unique_fruit_id <- unique(data[, c("id", "fruit")]) # 统计每个水果的参与者数量 fruit_counts <- table(unique_fruit_id$fruit) # 计算占比并转为数据框 result_df <- data.frame( fruit = names(fruit_counts), participant_count = as.numeric(fruit_counts), ratio = as.numeric(prop.table(fruit_counts)) ) print(result_df)
两种方法都能得到正确结果:apple被所有3名参与者选择,占比为100%,符合需求。
内容的提问来源于stack exchange,提问作者Basil
相关产品推荐
相关产品推荐

