Как я могу заполнить NA мультигруппой по медиане или моде в R - PullRequest
0 голосов
/ 05 марта 2020

Мне нужно заполнить каждый из NA в кадре данных 2-3 группами, используя медиану или значения режима в R.

На самом деле, я пытался вписать NA в группу по медиане для числовых переменных и групп по режиму для факторных переменных.

Я искал сайт, но не смог найти подходящих предложений, которые могли бы мне помочь.

В некоторых ответах предлагалось рассчитать целую NA или только одну переменную на время. Мой фрейм данных содержит более 40 столбцов.

Если кто-нибудь сможет решить это явно, я был бы очень признателен.

Вот мой грубый код, который, однако, не работает.

fillna_cols <- c(d,e,f,g,h...)

df %>% 
  group_by(a,b,c) %>% 
  mutate_at(fillna_cols, na.aggregate(df,FUN = median))

1 Ответ

2 голосов
/ 05 марта 2020

Изготовление некоторых данных

mtcars[ c(4,5,9) , "wt" ] <- NA

Взгляните

head( mtcars)

Перезаписать пропуски со средним значением

mtcars[ is.na( mtcars$wt) , "wt"] <- mean( mtcars$wt , na.rm=T)

Или медианой по группе

mtcars[ is.na( mtcars$wt) &mtcars$am %in%0 , "wt"] <- quantile( mtcars[ mtcars$am%in%0 , "wt"] , .5, na.rm=T)

mtcars[ is.na( mtcars$wt) &mtcars$am %in%1 , "wt"] <- quantile( mtcars[ mtcars$am%in%1 , "wt"] , .5, na.rm=T)

Или решение таблицы данных

library( data.table)
mtcars <- data.table( mtcars)
#median within cyl/am cells
mtcars[ , median := quantile( wt , .5 , na.rm=T) , by= .(cyl, am)] 
mtcars[ , impwt := ifelse( is.na( wt) , median , wt) ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...