我有两个不同的数据集(或向量)。让我们说说我有几个观察结果的变量:
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或更大的值。
感谢您的帮助!
答案 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