Вменение недостающих значений категориальным средним? - PullRequest
0 голосов
/ 19 марта 2019

У меня есть набор данных с несколькими столбцами, в одном из которых отсутствуют порции необходимых данных.

Столбец с отсутствующими данными, df $ Variable, всегда относится к определенному человеку, df $ Name,Есть ли способ подсчитать среднее значение для каждого человека - а не среднее значение для всего набора данных - всякий раз, когда в переменной df $ Variable отсутствуют данные?

Я играл с библиотекой imputeTS.

Ответы [ 2 ]

1 голос
/ 19 марта 2019

Трудно дать окончательный ответ без воспроизводимого примера, но, учитывая то, что вы сказали, что-то вроде этого должно работать:

library('tidyverse')

df <- data.frame(Name = c(rep("A", 5), rep("B", 5)),
                 Variable = sample(c(1, 2, 3, NA), 10, replace = TRUE))

df %>%
  group_by(Name) %>%
  mutate(non_na_mean = mean(Variable, na.rm = T)) %>%
  ungroup() %>%
  mutate(newVariable = ifelse(is.na(Variable), non_na_mean, Variable))
0 голосов
/ 19 марта 2019

Не видя ваш фрейм данных, я считаю, что это будет работать.

set.seed(7)
# make some fake data
df <- data.frame(Name = rep(as.character(c("A", "B", "C", "D")), 10), Variable = sample(1:100, 40))
# change some to NA
df[which(df$Variable > 40),"Variable"] <- NA

# Fill in NA's for D with the mean of D
df[which(df$Name == "D" & is.na(df$Variable)),"Variable"] <-
  mean(df[which(df$Name == "D"),"Variable"], na.rm = TRUE)

Вы также можете перебирать другие «Переменные»

variable_vec <- c("A", "B", "C", "D")
for(i in 1:length(variable_vec)){
df[which(df$Name == i & is.na(df$Variable)),"Variable"] <-
  mean(df[which(df$Name == i),"Variable"], na.rm = TRUE)
}
...