2016-09-17 110 views
1

我想检查一个值是否在一个范围内;如果存在,则插入一个值;否则什么都不做。值是否在一个范围内

说我有一些两个(或多个)载体,

A <- c(1.1, 3.4, 5.5, 10.2) 
B <- c(1.1, 3.4, 5.5, 8.01, 10.2) 

如果我看矢量A为一些范围7.8存在8.2,因为没有一个有欲插入数字8.01。

当我查看向量B并测试7.8到8.2范围内是否有一个数字时,因为有一个存在;我不想做任何事情。

它看起来很简单,但我失去了一些东西。任何帮助将受到感谢。

+0

您可以使用''<' or '>发现在这个范围内 – akrun

+0

这就是我的问题在于......如果一个_is_目前的作品但如果一个不是在“A”或“B”的元素? – user1945827

+0

我认为你可以使用Akrun的答案'长度'和'如果' –

回答

2

考虑这个玩具功能的一般实现。 x是输入向量,lu分别是下限和上限,而x0是要插入的值(如果需要插入)。

foo <- function (x, l, u, x0) { 
    z1 <- x > l 
    z2 <- x < u 
    if (sum(z1 & z2)) x 
    else append(x, x0, which(z1)[1] - 1) 
    } 

A <- c(1.1, 3.4, 5.5, 10.2) 
B <- c(1.1, 3.4, 5.5, 8.01, 10.2) 

foo(A, 7.8, 8.2, 8.01) 
#[1] 1.10 3.40 5.50 8.01 10.20 

foo(B, 7.8, 8.2, 8.01) 
#[1] 1.10 3.40 5.50 8.01 10.20 
1
if (!sum(A > 7.8 & A < 8.2)) A <- c(A, 8.01) 
if (!sum(B > 7.8 & B < 8.2)) B <- c(B, 8.01) 

如果您需要在序列中,而不是在末尾插入值,可以排序使用:

if (!sum(A > 7.8 & A < 8.2)) A <- sort(c(A, 8.01)) 
1

另一种方法通过dplyrbetween功能

if(!any(dplyr::between(A,7.8,8.2))) A <- c(A,8.01) 
if(!any(dplyr::between(B,7.8,8.2))) B <- c(B,8.01) 
相关问题