考虑以下数据表
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包执行此操作?