首页 > 解决方案 > 按组过滤 NA

问题描述

我有这个 df

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

我想得到这个

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

如果有关键字,我想保留它,如果没有,请保留 NA

尝试类似的东西

df %>% group_by(id) %>% filter(!is.na(keyword) | keyword != " ")

标签: rfilterconditional-statements

解决方案


可能的解决方案:首先我们删除所有包含 NA 的行keyword,然后为可能丢失id的 s 添加新行(所有其他列现在都将包含 NA):

library(dplyr)
library(tidyr)
df %>% 
  filter(!is.na(keyword)) %>% 
  full_join(df %>% select(id) %>% unique())

回报:

  id  keyword
1  1      car
2  1 hospital
3  2      cat
4  3     <NA>

推荐阅读