使用来自组内其他值的data.table来计算NA

时间:2017-08-20 11:26:21

标签: r group-by data.table na imputation

考虑以下数据表

library(data.table)
dt <- data.table(sys_id = 1:9,
             A = c(11, 12, 12, 13, 14, 15, 15, 18, 18),
             B = c(2, 1, 2, 1, 2, 1, 2, 1, 2),
             Age = c(13, NA, 13, NA, 11, NA, 12, NA, 12))

给出了以下数据表:

   sys_id  A B Age
1:      1 11 2  13
2:      2 12 1  NA
3:      3 12 2  13
4:      4 13 1  NA
5:      5 14 2  11
6:      6 15 1  NA
7:      7 15 2  12
8:      8 18 1  NA
9:      9 18 2  12

目标是将变量A组(每组1或2行)中的NA替换为同一组中的另一个Age值。这只能在一组(A)由两行组成时才能完成,在该组的两行之一中只有一个NA。因此第4行中Age的值可以保持为NA。我做了以下工作:

dt[, Age := unique(Age[!is.na(Age)]), by = A]
dt

这最后一个代码给了我以下数据表:

   sys_id  A B Age
1:      1 11 2  13
2:      2 12 1  13
3:      3 12 2  13
4:      4 13 1  NA
5:      5 14 2  11
6:      6 15 1  12
7:      7 15 2  12
8:      8 18 1  12
9:      9 18 2  12

我的问题:

虽然代码有效但代码不直观(对我而言)。我想要一个更易理解的代码,它表明对于一组变量A中的每个NA,必须使用距离最近的行(该组中的上方或下方)的Age值进行替换。是否有另一个(更直观的)代码使用data.table包执行此操作?

0 个答案:

没有答案