У меня большой набор данных с некоторыми пропущенными значениями (NA). Я пытаюсь заменить эти значения средствами столбца, но классом , то есть, если элементы в классе k имеют отсутствующее значение в столбце j, это значение будет заменено средним значением значений в столбце. J для предметов в классе k. Кроме того, я хочу сделать это только с базой R или dplyr.
Аспект класса приносит дополнительную проблему по сравнению с известным, который уже был здесь ответили: Замените пропущенные значения средним по столбцу .
Фактически я могу адаптировать одно из решений там в неуклюжее решение для моей проблемы:
NA2mean <- function(x){replace(x, is.na(x), mean(x, na.rm = TRUE))}
DF %>% filter(DF$class=="A") -> A
A <- lapply(A,NA2mean)
( где датафрейм DF, и я предположил, что коэффициент хранится в столбце «класс».)
Затем вы повторите это для всех других классов (например, B, C, D, E, F ). Наконец, вы можете использовать DF <- rbind (A, B, C, D, E, F), чтобы заменить ваш старый фрейм данных на исправленный. </p>
Фрейм данных в моем случае упорядочен по классу (т.е. Сначала, потом B, потом C, ...), и я бы хотел, чтобы все было так.
Есть ли способ сделать это намного эффективнее?