Замените NA и NaN на среднее значение столбца в нескольких столбцах. - PullRequest
1 голос
/ 02 апреля 2020

У меня есть кадр данных, подобный следующему, содержащий значения NA и NaN.

myinput <- data.frame("Date" = c("20010331", "20010331", "20010331", "20010630", "20010630"), "A" = c(3, NA, 5, NaN, 2), "B" = c(4, NA, 7, NaN, 8), "C" = c(6, NA, 5, NaN, 7), "D" = c(1, NA, 3, NaN, 8))

Я хотел бы заменить значения Na и NaN средним значением столбца, а l oop - по всем столбцам. Кроме того, я хотел бы выделить это на дату. Например, NA в столбце A будет средним значением всех значений столбца A с датой 20010331, а NaN в столбце A будет средним значением всех значений столбца A с датой 20010630.

Есть ли способ сделать это? Любая помощь очень ценится. Спасибо.

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

С dplyr:

myinput %>% 
   group_by(Date) %>% 
   mutate_at(vars(-group_cols()),~ifelse(is.na(.) | is.nan(.),
                                         mean(.,na.rm=TRUE),.))
# A tibble: 5 x 5
# Groups:   Date [2]
  Date         A     B     C     D
  <fct>    <dbl> <dbl> <dbl> <dbl>
1 20010331     3   4     6       1
2 20010331     4   5.5   5.5     2
3 20010331     5   7     5       3
4 20010630     2   8     7       8
5 20010630     2   8     7       8
0 голосов
/ 02 апреля 2020

Поскольку вы можете достичь того же результата с data.table , вы можете посмотреть, как это сделать здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...