Пытаясь расширить свой собственный рабочий процесс (из столбцов) здесь: [1] tidyverse - удалить столбец во вложенном столбце / списке для фильтрации во вложенном столбце / списке, я нашел это потенциальное решение: [2] Использовать filter () (и другие функции dplyr) внутри вложенных фреймов данных с map ()
Моя проблема в том, что я хочу фильтровать в каждом "гнезде" на те строки, которые не являются полностью NA (т.е. я хочу сохранить любую строку, которая имеет хотя бы одно не пропущенное значение .
Однако, простое решение в [2] не работает для меня, вероятно, потому что я хочу отфильтровать сумму NA в строке, что может включать в себя другую функцию карты внутри фильтра.
(Примечание: я использую текущую версию dplyr для github в tidyverse, которая предлагает некоторые новые экспериментальные функции, такие как конденсат - который я использую ниже, но я думаю, что это не относится к моей проблеме / вопросу).
У меня есть следующие данные:
Данные:
library(tidyverse)
library(corrr)
dat <- data.frame(grp = rep(1:4, each = 25),
Q1 = sample(c(1:5, NA), 100, replace = TRUE),
Q2 = sample(c(1:5, NA), 100, replace = TRUE),
Q3 = sample(c(1:5, NA), 100, replace = TRUE),
Q4 = sample(c(1:5, NA), 100, replace = TRUE),
Q5 = sample(c(NA), 100, replace = TRUE),
Q6 = sample(c(1:5, NA), 100, replace = TRUE))
Я сейчас вычислю кор отношения Q1 к Q6 для каждой группы и удалите столбец rowname
.
cor_dat <- dat %>%
group_by(grp) %>%
condense(cor = correlate(cur_data()) %>%
select(-rowname)) %>%
ungroup()
Но добавление этой строки в мой конвейер не работает:
cor_dat <- cor_dat %>%
mutate(cor = map(cor, ~ filter(., sum(is.na(.)) != ncol(.))))
Я тоже пробовал, но это также не работает:
cor_dat <- cor_dat %>%
mutate(cor = map(cor, ~ filter(., !all(is.na(.)))))
Ожидаемый результат в моих данных будет, что пятая строка в каждом гнезде отфильтрованы.