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

R语言如何按分组匹配数据框两列值并标记符合条件的行

问题场景

需要给大型数据框按规则打标记:按attr字段分组后,若某行的col1取值出现在同组的所有col2取值中,就给该行打标记1,否则打0。
期望效果参考示例:
数据集及期望标记值示例

原有错误代码:

df %>%
 group_by(attr) %>%
 mutate(flag=ifelse(any(col1)==any(col2), 1, 0))
错误原因

原有代码逻辑完全偏离需求:any(col1)的作用是判断col1列是否存在非空、非0、非FALSE的真值,any(col2)同理,二者比较本质是判断两列是否同时存在/不存在真值,和“col1的值是否在col2中匹配”没有关系,自然得不到正确结果。

解决方案

直接用%in%运算符做值匹配即可,不需要嵌套ifelse,布尔值转整数就能得到1/0标记:

library(dplyr)
df %>%
  group_by(attr) %>%
  mutate(flag = as.integer(col1 %in% col2)) %>%
  ungroup()

如果数据量极大,追求更高运算效率,可以用data.table写法,分组计算速度更快:

library(data.table)
setDT(df)[, flag := as.integer(col1 %in% col2), by = attr]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:06:23