Выделите строки со всеми или менее чем n чисел NA в заданном столбце c в R - PullRequest
2 голосов
/ 20 марта 2020

Я хочу отфильтровать свой фрейм данных в соответствии с указанными c условиями. Я хочу сохранить все записи, которые имеют только NA для переменной x1 для идентификатора или с менее чем n допустимых переменных. скажем, я хочу сохранить id = bb (все записи, которые имеют только NA для переменной x1), а также все записи для id = aa и id == cc , которые имеют менее 3 допустимых значений

df <- tibble::tribble(
   ~id,    ~date, ~x1, ~x2, ~x3, ~x4,
  "aa", 20200309, 204,  NA,  NA, 233,
  "aa", 20200310,  NA, 227,  NA, 178,
  "aa", 20200311,  NA, 144,   1, 532,
  "aa", 20200312,  NA,  72,  NA, 478,
  "bb", 20200313,  NA,  NA,  NA, 396,
  "bb", 20200314,  NA, 185,   3, 417,
  "bb", 20200315,  NA, 106,  NA, 292,
  "bb", 20200316,  NA,  63,  NA, 439,
  "bb", 20200317,  NA,  37,   4, 461,
  "bb", 20200318,  NA,  33,   1, 458,
  "cc", 20200314,  NA, 185,   3, 417,
  "cc", 20200315,  56, 106,  NA, 292,
  "cc", 20200316,  NA,  63,  NA, 439,
  "cc", 20200317,  NA,  37,   4, 461,
  "cc", 20200318,  105,  33,   1, 458,
  "dd", 20200316,  NA,  63,  NA, 439,
  "dd", 20200317,  NA,  37,   4, 461,
  "dd", 20200318,  NA,  33,   1, 458,
  "dd", 20200314,  NA, 185,   3, 417,
  "dd", 20200315,  56, 106,  NA, 292,
  "dd", 20200316,  NA,  63,  NA, 439,
  "dd", 20200317,  15,  37,   4, 461,
  "dd", 20200318,  105,  33,   1, 458 )

Я использую filter_at для первого условия (сохраняю все записи, которые имеют только NA для переменной x1 для идентификатора), но не уверен, как добавить второе условие

df %>% 
  group_by(id) %>% 
  filter_at(vars(x1), all_vars(all(is.na(.)) ))

Ответы [ 2 ]

1 голос
/ 20 марта 2020

Другой вариант -

library(dplyr)
df %>%
    group_by(id) %>%
    filter(length(which(!is.na(x1))) < 3)
1 голос
/ 20 марта 2020

Один из вариантов может быть:

df %>%
 group_by(id) %>%
 filter(sum(!is.na(x1)) < 3)

   id        date    x1    x2    x3    x4
   <chr>    <dbl> <dbl> <dbl> <dbl> <dbl>
 1 aa    20200309   204    NA    NA   233
 2 aa    20200310    NA   227    NA   178
 3 aa    20200311    NA   144     1   532
 4 aa    20200312    NA    72    NA   478
 5 bb    20200313    NA    NA    NA   396
 6 bb    20200314    NA   185     3   417
 7 bb    20200315    NA   106    NA   292
 8 bb    20200316    NA    63    NA   439
 9 bb    20200317    NA    37     4   461
10 bb    20200318    NA    33     1   458
11 cc    20200314    NA   185     3   417
12 cc    20200315    56   106    NA   292
13 cc    20200316    NA    63    NA   439
14 cc    20200317    NA    37     4   461
15 cc    20200318   105    33     1   458
...