首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >得到一个变量的最小值大于另一个变量的观察值。

得到一个变量的最小值大于另一个变量的观察值。
EN

Stack Overflow用户
提问于 2018-12-10 12:59:08
回答 2查看 65关注 0票数 3

我有两个不同的数据集(或向量)。比方说,在其中一个变量中,有几个观察结果:

代码语言:javascript
代码运行次数:0
运行
复制
a<- c(1:30)

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

代码语言:javascript
代码运行次数:0
运行
复制
ref <- c(5:10)

我想要为每个a创建一个变量,在大于(或等于)的变量中包含ref的最小值,否则生成0。我试过了,但显然行不通。

代码语言:javascript
代码运行次数:0
运行
复制
min <- ifelse(a>=ref, min(ref[a>=ref]), 0)

结果变量应具有与a相同的长度,当a介于1和4之间时为0,当a为5时为5,当a为6时为6。所有数值都在10或10以上。

谢谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-10 13:08:26

对于a的每个值,我们找到ref的最近值,如果它存在,它大于或等于a,否则返回0。

代码语言:javascript
代码运行次数:0
运行
复制
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.......

正如@Sotos所建议的那样,我们可以使用嵌套的replaceifelse在没有循环的情况下进行同样的操作。

代码语言:javascript
代码运行次数:0
运行
复制
#Option 1
replace(replace(a, a < min(ref), 0), a > max(ref), max(ref))

#Option 2
ifelse(a < min(ref), 0, ifelse(a > max(ref), max(ref), a))
票数 3
EN

Stack Overflow用户

发布于 2018-12-10 13:08:45

我们可以试试

代码语言:javascript
代码运行次数:0
运行
复制
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

代码语言:javascript
代码运行次数:0
运行
复制
out <- pmin(a, max(ref))
out[out < min(ref)] <- 0

也可以用一行编写

代码语言:javascript
代码运行次数:0
运行
复制
pmin(a, max(ref)) * (a >= min(ref))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53706205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档