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

在R中通过条件为同一组所有成员分配逻辑值

正确实现方法

你的问题出在仅判断当前行的role是否为Partner,而非检查整个家庭组内是否存在该角色。要实现需求,需在分组后对整个组进行统一判断,而非单一行。

方法1:dplyr分组后配合any()实现

library(dplyr)

families <- data.frame(family=c('1', '1', '1', '2', '2', '3', '3'),
                       name=c('John', 'Anitta', 'Steven', 'Stella', 'Robert', 'Adam', 'William'),
                       role=c('Leader', 'Partner', 'Son', 'Leader', 'Son', 'Leader', 'Partner'))

families <- families %>%
  group_by(family) %>%
  mutate(couple = any(role == 'Partner')) %>%
  ungroup() # 可选操作:取消分组,让数据框回到普通状态

print(families)

运行结果:

# A tibble: 7 × 4
  family name    role    couple
  <chr>  <chr>   <chr>   <lgl> 
1 1      John    Leader  TRUE  
2 1      Anitta  Partner TRUE  
3 1      Steven  Son     TRUE  
4 2      Stella  Leader  FALSE 
5 2      Robert  Son     FALSE 
6 3      Adam    Leader  TRUE  
7 3      William Partner TRUE  

方法2:保留case_when()语法的实现

如果偏好使用case_when(),只需将组级判断逻辑作为条件传入:

families <- families %>%
  group_by(family) %>%
  mutate(
    couple = case_when(
      any(role == 'Partner') ~ TRUE,
      TRUE ~ FALSE
    )
  ) %>%
  ungroup()

核心逻辑说明

  • group_by(family):按家庭分组,后续操作基于每个独立家庭组执行
  • any(role == 'Partner'):检查当前组内是否存在至少一个role为Partner的成员,返回单个逻辑值(TRUE/FALSE)
  • mutate():将组级的逻辑值赋值给组内每一行,实现同一家庭所有成员共享同一个couple值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:44:53