我有一个数据表:

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]

我想在Value-栏中填写NA::

  • 通过Range_Val列和类型使用最接近的非NA值.
  • 在平局的情况下,应该使用最大的Range_Val及其相应值(但这不是交易的 destruct 者,速度更重要).

我可以用for循环来做这件事,这很简单,但速度很慢.因此,我想要一种更干净的方式(也更快).什么是一个好的数据表-这样做的方式?

始终存在非NA值,但间隔可能不同.

推荐答案

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

output

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相关问答推荐

为什么以及如何修复Mapview不显示所有点并且st_buffer合并一些区域R?

更新合适的R mgcv::bam模型报告无效类型(关闭).'';错误

获取一个数据库框架的摘要,该数据库框架将包含一列数据库框架,

在不安装软件包的情况下测试更新

r替换lme S4对象的字符串的一部分

R根据条件进行累积更改

如何在一次运行中使用count进行多列计数

使用较长的查询提取具有部分匹配的列表中的较短目标,

识别连接的子网(R-igraph)

在数据帧列表上绘制GGPUP

在纵向数据集中创建新行

如何删除R中除数字元素以外的所有元素

在不对R中的变量分组的情况下取两行的平均值

将列的值乘以在不同数据集中找到的值

网络抓取新闻标题和时间

如何使用grepl()在数据帧列表中 Select 特定字符串?

具有自定义仓位限制和计数的GGPLATE直方图

从矩阵创建系数图

如何为包创建自定义roxygen2标签?

组合名称具有模式的列表的元素