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

如何使用tidyverse包移除所有分组中存在NA的对应行?

解决方案:移除所有存在NA的日期对应行

你原来用group_by(Class) %>% drop_na()的逻辑是按每个类别单独删除组内含NA的行,所以只删掉了类别B第3天的记录,但你需要的是只要某一天有任意类别出现NA,就把所有类别在这天的记录都删掉。

可以用两种方式实现:

方法1:先标记含NA的日期再过滤

library(tidyverse)

# 构造原始数据
Class <- c(rep("A",10),
           rep("B",10),
           rep("C",10))
Days <- rep(1:10,3)
Values <- c(1:12, NA, 14:30)
DF <- data.frame(Class, Days, Values)

# 处理数据:标记每个日期是否存在NA,再过滤掉这些日期
DF_clean <- DF %>%
  # 按日期分组,标记该日期是否有NA值
  mutate(has_na = any(is.na(Values)), .by = Days) %>%
  # 过滤掉存在NA的日期
  filter(!has_na)

注:.by = Days是dplyr 1.1.0及以上版本的语法,如果你的dplyr版本较低,改用group_by(Days) %>% mutate(has_na = any(is.na(Values))) %>% ungroup()

方法2:先提取含NA的日期列表再过滤

# 先找出所有存在NA的日期
bad_days <- DF %>%
  filter(is.na(Values)) %>%
  pull(Days) %>%
  unique()

# 过滤掉这些日期的所有记录
DF_clean <- DF %>%
  filter(!Days %in% bad_days)

两种方法最终都会移除所有第3天的记录(不管是A、B还是C类),达到你想要的效果。

内容的提问来源于stack exchange,提问作者Daniel Valencia C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:45:39