r - 如何检查数据表中每一行的列值是否在另外两个的范围内
问题描述
我现在正在研究一个 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)
有什么有效的方法可以解决这个问题吗?非常感谢您的帮助。
解决方案
最有效的方法可能是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()
到.()
.
推荐阅读
- java - 优化数组排序子程序
- php - PHP/MySQL:发现不止一次出现时限制 foreach 循环
- java - InitialContext 查找(“java:comp/env”)失败
- java - 如何使用流从对象列表中获取地图?
- gcc - 在 Linux 上编译的 PE 动态符号表
- java - AES GCM 密钥派生 swift
- azure-devops - Azure DevOps:区域 ID 的规则不起作用
- python - 从 CMD 打开 Python 脚本时无法将数据保存到文件
- xero-api - Xero CIS 联系人设置
- javascript - 在 Javascript 中动态初始化 Dropzone(在运行时)