Подстановка строки, если имеется NA, если имеется более одного вхождения в другую переменную, представляющую интерес? - PullRequest
0 голосов
/ 28 января 2019
   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 присутствует в 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")

1 Ответ

0 голосов
/ 28 января 2019

После группировки по «имени индикатора» создайте условие в 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))),]
...