Перекодировать NA со значениями из идентичного идентификатора с data.table - PullRequest
0 голосов
/ 05 февраля 2019

Я нахожусь в процессе обучения использованию data.table и пытаюсь перекодировать NA в пропущенные значения с помощью b.

library(data.table)
dt <- data.table(a = rep(1:3, 2),
                 b = c(rep(1,3), rep(2, 3)),
                 c = c(NA, 4, NA, 6, NA, NA))

> dt
   a b  c
1: 1 1 NA
2: 2 1  4
3: 3 1 NA
4: 1 2  6
5: 2 2 NA
6: 3 2 NA

Я хотел бы получить это:

> dt
   a b  c
1: 1 1  4
2: 2 1  4
3: 3 1  4
4: 1 2  6
5: 2 2  6
6: 3 2  6

Я пробовал это, но никто не дает желаемого результата.

dt[, c := ifelse(is.na(c), !is.na(c), c), by = b]
dt[is.na(c), c := dt[!is.na(c), .(c)], by = b]

Ценю, чтобы получить помощьи небольшое объяснение того, как я должен учитывать / думать при попытке решить проблему с помощью data.table подхода.

1 Ответ

0 голосов
/ 05 февраля 2019

Предполагая простой случай, когда есть только один c для каждого уровня b:

dt[, c := c[!is.na(c)][1], by = b]
dt
...