Я хотел бы удалить строки, где столбец a имеет повторяющиеся значения на основе количества NA в других столбцах. Это похоже на это, но я не могу заставить подсчитывающие NA работать там с решениями.
Удаление строк, которые дублируются в одном столбце, на основе условий другого столбца
Вот мой набор данных игрушек:
df1 <- data.frame(a = c("x","y","y","z","x", "z"), b = c(1,2,NA,4,8,3), c = c(NA,2,2,NA,NA,4), d= c(1:4,NA,NA))
, что дает:
a b c d
1 x 1 NA 1
2 y 2 2 2
3 y NA 2 3
4 z 4 NA 4
5 x 8 NA NA
6 z 3 4 NA
Я хотел бы сохранить только строки с уникальными значениями в столбце a и оставить только строки с наименьшим количеством NA в столбцах b & c (игнорируя NA в столбце d)
Вот код, который я придумал:
df1 %>%
mutate(NAs= apply(is.na(cbind(b,c)), 1, sum)) %>%
group_by(a) %>%
top_n(n=1, -NAs)
Моя проблема в том, что top_n возвращает более одной строки, если есть связь. В случае галстука, я просто хочу вернуть первый ряд. И, вероятно, есть лучший способ выбрать столбцы в mutate, чем cbind. Мне также не нужна переменная "NA", которую я создал, используя mutate. Мой желаемый вывод такой:
a b c d
x 1 NA 1
y 2 2 2
z 3 4 NA