r - 使用最近的非 na-observation 用 NA 值填充 data.table

标签 r data.table

我有一个 data.table:

library(data.table)
dt.tst <- CJ(Type = c("A", "B"),
             Range_val = seq(0,20000, by = 1000))


dt.tst[Range_val == 2000 & Type == "A", Value := 0.987]
dt.tst[Range_val == 2000 & Type == "B", Value := 1.987]

dt.tst[Range_val == 9000 & Type == "A", Value := 1.056]
dt.tst[Range_val == 9000 & Type == "B", Value := 2.138]

dt.tst[Range_val == 16000 & Type == "A", Value := 1.563]
dt.tst[Range_val == 16000 & Type == "B", Value := 2.089]

我想在值列中填写 NA:s:

  • 使用 Range_val 列和类型最接近的非 na 值。
  • 如果出现平局,则应使用最高 Range_val 及其对应的 Value(但这不是破坏交易,速度更重要)。

我可以用 for 循环来做这个很简单但速度很慢的事情。所以我想要一种更干净的方式(而且更快)。这样做的好 data.table 方式是什么?

总会有非 na 值,但间隔可能不同。

最佳答案

dt.tst[is.na(Value), Value := dt.tst[!is.na(Value)][dt.tst[is.na(Value)], roll = "nearest", on = .(Type, Range_val)]$Value]

输出

dt.tst

#     Type Range_val Value
#  1:    A         0 0.987
#  2:    A      1000 0.987
#  3:    A      2000 0.987
#  4:    A      3000 0.987
#  5:    A      4000 0.987
#  6:    A      5000 0.987
#  7:    A      6000 1.056
#  8:    A      7000 1.056
#  9:    A      8000 1.056
# 10:    A      9000 1.056
# 11:    A     10000 1.056
# 12:    A     11000 1.056
# 13:    A     12000 1.056
# 14:    A     13000 1.563
# 15:    A     14000 1.563
# 16:    A     15000 1.563
# 17:    A     16000 1.563
# 18:    A     17000 1.563
# 19:    A     18000 1.563
# 20:    A     19000 1.563
# 21:    A     20000 1.563
# 22:    B         0 1.987
# 23:    B      1000 1.987
# 24:    B      2000 1.987
# 25:    B      3000 1.987
# 26:    B      4000 1.987
# 27:    B      5000 1.987
# 28:    B      6000 2.138
# 29:    B      7000 2.138
# 30:    B      8000 2.138
# 31:    B      9000 2.138
# 32:    B     10000 2.138
# 33:    B     11000 2.138
# 34:    B     12000 2.138
# 35:    B     13000 2.089
# 36:    B     14000 2.089
# 37:    B     15000 2.089
# 38:    B     16000 2.089
# 39:    B     17000 2.089
# 40:    B     18000 2.089
# 41:    B     19000 2.089
# 42:    B     20000 2.089

关于r - 使用最近的非 na-observation 用 NA 值填充 data.table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73699446/

相关文章:

r - 如何在同一个 R 散点图中绘制多个系列?

r - 分布多个协调列

r - 如何用R中的指定字符替换空格和字符?

r - 取消列出嵌套列表并使用 ggplot 绘图

r - 将函数应用于 data.table 中的每个指定列并按引用更新

r - 使用 : unique and == function 的意外行为

r - 使用ggmap和gganimate创建 'flyover' map 动画

r - 从 R 中的字符中提取 "|"

r - 数据表和分层均值

r - 如何在 data.table 中的多个列中使用 ifelse?