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

如何在dplyr中仅对观测数>1的组过滤保留NA行

简化dplyr分组筛选逻辑的实现

需求说明

仅保留观测数大于1的组中的NA行;对于仅含1条观测的组,无论是否存在NA,均保留所有行。

示例数据

library(dplyr)

data <- data.frame(
  x = c(1, NA_real_, 3, NA_real_),
  y = c("grp1", "grp2", "grp2", "grp3")
)
data
#>    x    y
#> 1  1 grp1
#> 2 NA grp2
#> 3  3 grp2
#> 4 NA grp3

当前繁琐实现

raw <- data %>%
  group_by(y) %>%
  mutate(n = n())

results <- bind_rows(
  raw %>%
    filter(n == 2) %>%
    filter(is.na(x)),
  raw %>%
    filter(n == 1)
) %>%
  ungroup() %>%
  select(-n)

results
#> # A tibble: 3 × 2
#>       x y    
#>   <dbl> <chr>
#> 1    NA grp2 
#> 2     1 grp1 
#> 3    NA grp3

简洁实现方法

直接在分组后用单个filter语句组合条件即可,无需拆分后再合并:

data %>%
  group_by(y) %>%
  filter(n() == 1 | is.na(x)) %>%
  ungroup()

运行结果和上述results完全一致,逻辑是:

  • 组内观测数为1的行全部保留
  • 组内观测数大于1的行,仅保留x为NA的记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:50:44