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

R中如何统计A、B曾分别为1(无需同行)的唯一id数量?

你的代码逻辑问题在于:你筛选的是同一行同时满足A=1和B=1的记录,你的示例数据中不存在这类行,因此返回结果为0,不符合需求。

你需要的是判断每个id是否同时满足「至少有一条记录A=1」和「至少有一条记录B=1」,可以用以下几种方法实现:

方法1:基础R集合运算(最简单直接)

分别提取出现过A=1、B=1的id集合,取交集的长度即可:

# 提取所有出现过A=1的唯一id
id_A <- unique(df$id[df$A == 1])
# 提取所有出现过B=1的唯一id
id_B <- unique(df$id[df$B == 1])
# 计算两个集合的交集长度
length(intersect(id_A, id_B))

运行结果为2,符合预期。

方法2:基础R分组统计

按id分组统计每个id的A、B是否出现过1,再筛选符合条件的id数:

# 按id聚合,分别统计每个id是否存在A=1、B=1
id_stat <- aggregate(cbind(has_A = A, has_B = B) ~ id, df, FUN = function(x) as.integer(any(x == 1)))
# 统计同时满足两个条件的id数量
nrow(subset(id_stat, has_A == 1 & has_B == 1))

方法3:dplyr 写法(更易读)

如果你常用tidyverse生态,可以用分组汇总的逻辑实现:

library(dplyr)
df %>%
  group_by(id) %>%
  summarise(
    has_A = any(A == 1),
    has_B = any(B == 1)
  ) %>%
  filter(has_A, has_B) %>%
  nrow()

以上三种方法都可以得到你需要的结果:111、153两个id符合条件,108只有A=1的记录没有B=1的记录,所以最终统计值为2。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:21:03