使用与data.table来自相似ID的值重新编码NA

时间:2019-02-04 23:49:56

标签: r data.table recode

我正在学习使用data.table,并尝试通过b将NA重新编码为非缺失值。

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 :(得分:1)

假设一个简单的情况,c的每个级别只有一个b

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