首页 > 解决方案 > 如何检查数据表中每一行的列值是否在另外两个的范围内

问题描述

我现在正在研究一个 R 问题,在我的最后一步中,我想检查我的 95% 置信区间是否包含参数的真实值。我在这一步有一个问题。

dat <- data.table(low = c(0.9, 1.1, 1, 0.95),
                  up = c(0.99, 1.2, 1.3, 1.4),
                  true = c(1, 1.15, 1.2, 1.5))

例如,在第一行中,我想检查真值 1 是否具有 0.9 到 0.99 的置信区间。显然不是这样返回0。按行检查后。期望的结果将是:

result <- data.table(low = c(0.9, 1.1, 1, 0.95),
                     up = c(0.99, 1.2, 1.3, 1.4),
                     true = c(1, 1.15, 1.2, 1.5), 
                     conv = c(0, 1, 1, 0))
print(result)

有什么有效的方法可以解决这个问题吗?非常感谢您的帮助。

标签: rdata.tableintervals

解决方案


最有效的方法可能是between运营商:

> result[, conv2 := as.integer(true %between% .(low, up))]
> result
    low   up true conv conv2
1: 0.90 0.99 1.00    0     0
2: 1.10 1.20 1.15    1     1
3: 1.00 1.30 1.20    1     1
4: 0.95 1.40 1.50    0     0

您可以跳过as.integer获取逻辑列,这在 R 中对此类数据进行编码时更为标准。

我在这里使用的between函数来自 data.table 并且有两种语法:

x %between% list(dn, up)
between(x, dn, up)

在里面DT[...]你可以缩短list().().


推荐阅读