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

R语言中如何基于ID号创建标识同组答案一致性的新列

R语言按ID分组匹配列值生成新列的实现方法

完全可以实现,核心是按ID字段分组后,对组内的Val字段做一致性判断,再把结果赋值为新列即可,不需要硬编码全局行号引用值。
首先构造你给出的示例数据集:

# 示例数据
df <- data.frame(
  ID = c(1, 2, 3, 2, 3, 1),
  Val = c("yes", "yes", "yes", "no", "yes", "no")
)

常用实现方案

1. dplyr包实现(代码可读性最高,日常分析首选)

按ID分组后,判断组内所有Val值是否和组内第一个值完全相等即可,完全匹配你提到的类Val[person 1] == Val[person 2]等值判断规则,且不受组内观测数量限制:

library(dplyr)

df <- df %>%
  group_by(ID) %>%
  # 替换为 n_distinct(Val) == 1 逻辑完全等价
  mutate(ans_consistent = all(Val == first(Val))) %>%
  ungroup()

运行后得到的结果:

IDValans_consistent
1yesFALSE
2yesFALSE
3yesTRUE
2noFALSE
3yesTRUE
1noFALSE

其中ID=3的组所有Val均为yes,标记为TRUE(答案一致);ID=1、ID=2的组同时存在yes和no,标记为FALSE(答案不一致),符合预期。

2. base R实现(无需安装第三方包)

不依赖第三方扩展包的情况下,可以用ave()函数完成分组计算:

df$ans_consistent <- as.logical(
  ave(as.integer(factor(df$Val)), df$ID, FUN = \(x) all(x == x[1]))
)

注意:不要硬写全局行号做值匹配,比如直接写Val[1] == Val[6]对应ID=1的两条记录,一旦数据排序、增删行就会完全失效,分组计算的写法对数据顺序变动的鲁棒性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:06:26