获得一个变量的最小值大于另一个变量的观测值

时间:2018-12-10 12:59:09

标签: r

我有两个不同的数据集(或向量)。让我们说说我有几个观察结果的变量:

a<- c(1:30)

然后在另一个数据集中,我还有另一个(小得多的变量),假设只有5个观测值。

ref <- c(5:10)

我想创建一个变量,其中包含大于(或等于)大于a的ref的最小值,对于每个a,否则产生0。我尝试了此操作,但显然不起作用。

min <- ifelse(a>=ref, min(ref[a>=ref]), 0)

结果变量的长度应与a相同,并且当a在1和4之间时为0,在5、5时为5,在6 ...时为10 ...对于所有10或更大的值。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

对于ul的每个值,我们发现最接近的a值大于或等于ref(如果存在),否则返回0。

a

如@Sotos所建议,我们可以使用嵌套的sapply(a, function(x) ifelse(any(x >= ref), max(ref[which(x >= ref)]), 0)) #[1] 0 0 0 0 5 6 7 8 9 10 10 10 10 10 10 10 10 10 10....... replace进行无循环操作

ifelse

答案 1 :(得分:3)

我们可以尝试

"*$oldName*"

或者另一个选择是replace(findInterval(a, ref) + min(ref) - 1, a <= min(ref), 0) [#1] 0 0 0 0 0 6 7 8 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10

pmin/pmax

也可以用

一行编写
out <- pmin(a, max(ref))
out[out < min(ref)] <- 0