如何检查数据中每一行的列值是否在另外两个范围内 table
How to check if a column value is within a range of another two for each row in data table
我现在正在处理 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 的置信区间。显然不是这样 return 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)
有什么有效的方法可以解决这个问题吗?非常感谢您的帮助。
这在 data.table
中是惯用的
dat[, inConf := ifelse(true >= low & true <= up,T,F)]
###alternatively with 0,1
dat[, inConf := ifelse(true >= low & true <= up,1,0)]
最有效的方法可能是 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()
缩短为 .()
。
我现在正在处理 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 的置信区间。显然不是这样 return 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)
有什么有效的方法可以解决这个问题吗?非常感谢您的帮助。
这在 data.table
dat[, inConf := ifelse(true >= low & true <= up,T,F)]
###alternatively with 0,1
dat[, inConf := ifelse(true >= low & true <= up,1,0)]
最有效的方法可能是 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()
缩短为 .()
。