2016-09-17 112 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) 
相關問題