我有一系列数字,包括整数和小数。 当我尝试使用一系列数字对此列表进行子集时,它会在子集化时忽略小数。 如何让子集范围包含小数?
注意:我知道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
答案 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