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

R语言按分组过滤NA:保留组内非空keyword及无有效值时的NA

问题原因

你原代码的逻辑会将所有keyword为NA的行直接过滤,导致全组都是NA的id(比如示例中的id=3)被完全删除,无法满足保留一行NA的需求。

正确实现(dplyr方案)

按id分组后,先判断当前组是否全部都是NA值:

  • 如果全为NA,仅保留第一行
  • 如果存在有效值,保留所有非NA的行

代码如下:

library(dplyr)

df <- data.frame(
    id = c(1L,1L,1L,2L,2L,3L),
    keyword = c("car","hospital",NA,"cat",NA,NA))

result <- df %>%
  group_by(id) %>%
  filter(if (all(is.na(keyword))) {
    row_number() == 1
  } else {
    !is.na(keyword)
  }) %>%
  ungroup()

运行后输出的result和你要求的结果完全一致:

> result
# A tibble: 4 × 2
     id keyword 
  <int> <chr>   
1     1 car     
2     1 hospital
3     2 cat     
4     3 NA  

其他可选方案(基础R)

如果不想依赖dplyr,也可以用基础R的split+lapply实现:

df_list <- split(df, df$id)
result <- do.call(rbind, lapply(df_list, function(x) {
  valid <- x[!is.na(x$keyword), ]
  if (nrow(valid) > 0) valid else x[1, ]
}))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:54:03