R:多个匹配的向量子集

时间:2015-06-29 14:15:07

标签: r vector subset

我今天遇到了一个看似容易解决的问题。这让我头疼了一个多小时,我不知道如何解决这个问题而不必实现一个循环(这是耗时的,与优雅的编程相反)。

鉴于我有一组从400到420的数字("数据")。然后有一个由用户指定的范围。该范围稍后将成为数据的子集(" vector_subset")。此外,还有一个数字要从数据中排除(" vector_substract")。

这就是我得到的:

data <- seq(400,420)
vector_subset <- seq(405,412)
vector_substract <- c(402,403,404,405,408,409,412,413,414)

现在我想找到我需要提取的元素,因为它们都在用户子集向量和减法向量中:

intersection <- intersect(vector_subset, vector_substract)

这很好用:

> intersection
[1] 405 408 409 412

现在我想从&#34;数据&#34;中排除这些值。向量。但如果我试试这个:

result <- data[-which(data==intersection)]

R告诉我

  

在data == intersection:     较长的物体长度不是较短物体长度的倍数

如果我一次删除一个元素,它可以正常工作。像:

result <- data[-which(data==intersection[1])]
> result
 [1] 400 401 402 403 404 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420

- &GT;第一次进入&#34;十字路口&#34;已经走了(405)。

所以我可以按条目实现for循环和删除条目,但这需要太长时间。有没有更好的方法来构建我想要的子集?

感谢所有帮助者!

1 个答案:

答案 0 :(得分:2)

只需使用常规的设置操作:

setdiff(data, intersect(vector_subset, vector_substract))
#[1] 400 401 402 403 404 406 407 410 411 413 414 415 416 417 418 419 420