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

如何在dplyr中为分组内所有行填充二分类结果?

分组批量赋值新变量的解决方案

问题描述

需要通过group_by()创建新变量var3,规则是:若分组(group+d_num)内任意一行满足var1 == 1或var2 == 1,则该组所有行的var3都赋值为1;若组内无任何行满足条件,则赋值为0。原代码仅为满足条件的单行赋值1,无法实现整组统一赋值。

解决方法

核心是在分组后,用any()函数判断组内是否存在符合条件的行——any()会检查组内所有行,只要有一行满足条件就返回TRUE,否则返回FALSE,再用as.integer()将布尔值转为1/0,即可实现整组统一赋值。

修改后的代码如下:

library(tidyverse)

set.seed(10)
dat <- data.frame(
  group = rep(c("Group1", "Group2"), each = 18),
  d_num = rep(c(1:6), times = 2, each = 3),
  var1 = sample(1:4, 36, replace = TRUE),
  var2 = sample(1:4, 36, replace = TRUE)
)

x <- dat %>%
  group_by(group, d_num) %>%
  mutate(var3 = as.integer(any(var1 == 1 | var2 == 1))) %>%
  ungroup() # 可选:如果后续不需要分组状态,可以取消分组

代码说明

  • any(var1 == 1 | var2 == 1):遍历当前分组的所有行,只要有一行满足var1或var2等于1,就返回TRUE,否则FALSE。
  • as.integer():把布尔值TRUE转为1,FALSE转为0,这样整个分组的所有行都会得到同一个var3值。
  • 可选的ungroup():如果后续操作不需要保留分组结构,取消分组可以避免意外问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:30:46