如何在"中包含十进制数字:"序列

时间:2016-09-19 00:28:52

标签: r sequence

我有一系列数字,包括整数和小数。 当我尝试使用一系列数字对此列表进行子集时,它会在子集化时忽略小数。 如何让子集范围包含小数?

注意:我知道seq可用于创建具有不同小数的序列(例如see here),但如果我想使用实际,那该怎么办呢?我的数据中的值而不是新创建的序列?

这可能吗?

例如:

vec <- c(-1, 0, 0.5, 0.9, 1, 1.2, 1.3, 5, 5.4, 6, 7, 9)

vec[!(vec %in% 0:2)]
 [1] -1.0  0.5  0.9  1.2  1.3  5.0  5.4  6.0  7.0  9.0

#But what I want is:
 [1] -1.0  5.0  5.4  6.0  7.0  9.0   

vec[!(vec %in% 1.2:5.4)]
 [1] -1.0  0.0  0.5  0.9  1.0  1.3  5.0  5.4  6.0  7.0  9.0

#But what I want is:
 [1] -1.0  0.0  0.5  0.9  1.0  6.0  7.0  9.0   

2 个答案:

答案 0 :(得分:2)

这是另一种使用findInterval的方法。我发现该函数可以避免复杂的嵌套ifelse构造。在这个例子中,它看起来确实比评论建议使用vec[!(vec >= 0 & vec < 2)].更好,findInterval`返回一个数字向量,只要它的第一个输入可以用于索引:

vec <- c(-1, 0, 0.5, 0.9, 1, 1.2, 1.3, 5, 5.4, 6, 7, 9)
vec [ findInterval(vec, c(0,2)) != 1]
#[1] -1.0  5.0  5.4  6.0  7.0  9.0

根本不能使用:,因为它只支持整数。

答案 1 :(得分:0)

使用between

dplyr函数的另一种方法
vec[!dplyr::between(vec,0,2)]
#[1] -1.0  5.0  5.4  6.0  7.0  9.0
vec[!dplyr::between(vec,1.2,5.4)]
#[1] -1.0  0.0  0.5  0.9  1.0  6.0  7.0  9.0