首页 > 解决方案 > 如果另一个感兴趣的变量不止一次出现,则如果存在 NA 则子集行?

问题描述

   Indicator Name Examine
1           Alpha      NA
2            Beta    2013
3            Beta    2017
4            Beta      NA
5         Charlie    2013
6         Charlie    2017
7         Charlie      NA
8           Delta    2016
9            Echo    2016
10           <NA>      NA
11           <NA>      NA
12        Foxtrot    2007
13        Foxtrot      NA

在这里,我想删除NA存在 an 的行Examine,如果Indicator Name有多个条目,除了.NA

因此,将删除第 4、7 和 13 行。

样本df:

structure(list(`Indicator Name` = c("Alpha", "Beta", "Beta", 
"Beta", "Charlie", "Charlie", "Charlie", "Delta", "Echo", NA, 
NA, "Foxtrot", "Foxtrot"), Examine = c(NA, 2013, 2017, NA, 2013, 
2017, NA, 2016, 2016, NA, NA, 2007, NA)), row.names = c(NA, 13L
), class = "data.frame")

标签: rdplyrsubset

解决方案


按“指标名称”分组后,在 中创建条件filter以删除 NA 元素或保留如果all元素NA

library(dplyr)
df %>% 
   group_by(`Indicator Name`) %>%
   filter(!is.na(Examine)| all(is.na(Examine)))

或者使用相同的逻辑base R

df[with(df, ave(is.na(Examine), `Indicator Name`, FUN = function(x) !x|all(x))),]

推荐阅读