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

在R中基于多列条件筛选重复ID对应行的技术求助

R中按ID分组提取列目标值的解决方案

需求:针对重复ID的行,每个列若该ID组内存在0则保留0;无0则保留组内任意非0值。

示例数据构造

df <- data.frame(
  ID = c("001", "002", "002", "003", "003", "003"),
  A = c(1, 0, 1, 0, 1, 0),
  B = c(1, 1, 0, 1, 0, 0),
  C = c(1, 0, 0, 1, 1, 1)
)

方法一:dplyr包实现(推荐,适配大量列场景)

library(dplyr)

result <- df %>%
  group_by(ID) %>%
  summarise(across(-ID, ~ifelse(any(.x == 0), 0, first(.x)))) %>%
  ungroup()

print(result)

运行结果:

# A tibble: 3 × 4
  ID        A     B     C
  <chr> <dbl> <dbl> <dbl>
1 001       1     1     1
2 002       0     0     0
3 003       0     0     1

逻辑说明:

  1. group_by(ID):按ID对数据分组
  2. across(-ID, ...):对所有非ID列执行自定义判断
  3. 自定义函数:检查组内是否存在0,存在则返回0,否则返回组内第一个非0值(因组内无0,所有值一致)

方法二:Base R实现(无需额外包)

result_base <- aggregate(. ~ ID, data = df, FUN = function(x) ifelse(any(x == 0), 0, x[1]))
print(result_base)

运行结果与上述一致,核心逻辑是通过aggregate按ID分组,对每列执行相同的条件判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:25:33