如何快速判断R语言分组内成员的Choice是否一致?
简洁高效的实现方案
基于tidyverse生态的dplyr包,我们可以快速实现需求,两种常用方案如下:
方案一:基于唯一值数量判断
先加载依赖包(未安装的话先运行install.packages(c("tibble", "dplyr"))):
library(tibble) library(dplyr) # 设置随机种子保证结果可复现 set.seed(123) df <- tibble(ID = c(1:12), Group = c(rep(1,3), rep(2,3), rep(3,3), rep(4,3)), Choice = c( rep(1.5, 3), round(rnorm(n=9,mean=10,sd=5), digits = 1) ) ) # 添加Symmetric列 df <- df %>% group_by(Group) %>% mutate(Symmetric = as.integer(n_distinct(Choice) == 1)) %>% ungroup()
核心逻辑:
- 按
Group分组后,用n_distinct(Choice)统计组内Choice的唯一值个数 - 判断唯一值个数是否为1,将布尔结果转为整数(TRUE→1,FALSE→0)
方案二:基于组内值一致性判断
如果更关注组内所有值是否和第一个值完全一致,可使用此方案:
df <- df %>% group_by(Group) %>% mutate(Symmetric = as.integer(all(Choice == first(Choice)))) %>% ungroup()
核心逻辑:
- 检查组内每一个
Choice是否等于组内第一个Choice - 用
all()确认所有元素都满足条件,再转为整数标记
两种方案都能高效完成需求,数据量较大时两者性能差异可忽略,按需选择即可。
内容的提问来源于stack exchange,提问作者Lin Jing
相关产品推荐
相关产品推荐

