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

R语言按唯一ID分组并将对应列转为0/1的实现求助

解决R语言中按ID聚合0/1列(任意行有1则保留1)的问题

核心解法(dplyr)

你需要的是按id分组后,对每个0/1列取最大值——只要该ID下任意一行的列值为1,最大值就是1;全为0则结果为0,正好匹配需求。用dplyr可以快速实现:

library(dplyr)

# 你的原始数据
df <- data.frame("id"=c("1","1","1","2","3","3"), 
                 "1"=c(1,0,0,1,0,0), 
                 "2"=c(0,1,0,1,0,0))

# 数据处理
result_df <- df %>%
  group_by(id) %>%
  summarise(across(everything(), max))

# 查看结果
result_df

运行后得到的结果:

# A tibble: 3 × 3
  id    `1`   `2`
  <chr> <dbl> <dbl>
1 1         1     1
2 2         1     1
3 3         0     0

基础R替代方案

如果不想加载dplyr包,用aggregate函数也能实现同样效果:

result_df_base <- aggregate(. ~ id, data = df, FUN = max)

为什么你的之前尝试没成功?

  • group_by(id) %>% tally()只会统计每个ID的行数,不会保留其他列的计算结果;
  • distinct()需要整行完全重复才会去重,而你同一ID下的行因为列值不同,所以无法去重;
  • 先去重再求和的思路不对,应该直接对分组后的列取最大值(或求和后转成0/1,不过最大值更直接)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:40:57