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

如何用dplyr判断数据框列表列中是否包含指定状态向量

报错原因

你代码报错的核心逻辑是:wanted_status %in% nstatus会返回和wanted_status长度一致的逻辑向量(示例中为长度2),但分组后每个分组的mutate要求返回长度为1的结果,长度不匹配触发了回收报错。你的需求是判断所有目标状态都被当前分组完整包含,需要用all()把多个逻辑判断结果聚合为单个布尔值。

修正后的代码

推荐更简洁的写法,无需额外构造列表列再去重,直接用summarise返回每组的判断结果:

library(tidyverse)

dat <- tribble(~cell, ~status, 
        "A", "x+", 
        "A", "y-",
        "A", "z+", 
        "B", "x-",
        "B", "y-", 
        "B", "z+")
wanted_status <- c("x+", "y-")

dat %>% 
  group_by(cell) %>% 
  summarise(contained = if_else(all(wanted_status %in% status), "in", "out"))

输出结果

# A tibble: 2 × 2
  cell  contained
  <chr> <chr>    
1 A     in       
2 B     out      

如果你要保留原有构造列表列的写法,只需要修改contained的计算逻辑即可:

dat %>% 
  group_by(cell) %>% 
  mutate(nstatus = list(status)) %>%
  dplyr::select(-status) %>% 
  unique() %>% 
  mutate(contained = if_else(all(wanted_status %in% unlist(nstatus)), "in", "out"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 01:15:01