Заполните NA средними значениями, соответствующими уникальным в R - PullRequest
0 голосов
/ 11 декабря 2019

Я хочу заполнить строки NA в таблице данных средними значениями для уникального значения из другого столбца. Пожалуйста, смотрите намеченный результат. Как я могу добиться этого в R? Я предпочитаю вывод данных таблицы.

data2 <- data.table(Plan=c(11,11,11,11,91,91,91,91), Price=c(4.4,4.4,4.4,NA,3.22,3.22,3.22,NA), factor=c(0.17,0.17,0.17,NA,0.15,0.15,0.15,NA), Type=c(4,4,4,4,3,3,3,3))

data2
   Plan Price factor Type
1:   11  4.40   0.17    4
2:   11  4.40   0.17    4
3:   11  4.40   0.17    4
4:   11    NA     NA    4
5:   91  3.22   0.15    3
6:   91  3.22   0.15    3
7:   91  3.22   0.15    3
8:   91    NA     NA    3



Output
       Plan Price factor Type
    1:   11  4.40   0.17    4
    2:   11  4.40   0.17    4
    3:   11  4.40   0.17    4
    4:   11  4.40   0.17    4
    5:   91  3.22   0.15    3
    6:   91  3.22   0.15    3
    7:   91  3.22   0.15    3
    8:   91  3.22   0.15    3

1 Ответ

0 голосов
/ 11 декабря 2019

Мы можем использовать na.locf, сгруппированные по «Плану», чтобы изменить NA с предыдущими значениями, не относящимися к NA *

library(zoo)
data2[, factor := na.locf(factor), by = Plan]

Если нам нужно mean, используйте na.aggregate

data2[, factor := na.aggregate(factor), by = Plan]

Для нескольких столбцов

nm1 <- c("Price", "factor"_
data2[, (nm1) := lapply(.SD, na.aggregate), by = Plan, .SDcols = nm1]
...