簡體   English   中英

R:多個匹配的向量子集

[英]R: Subset of vector for multiple matches

我今天遇到了一個看似容易解決的問題。 這讓我頭疼了一個多小時,而且我不知道如何在不執行循環的情況下解決該問題(這很耗時,與優雅編程相反)。

給定我有一組從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

現在,我想從“數據”向量中排除這些值。 但是,如果我嘗試這樣做:

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

R告訴我

在數據中==交集:較長的對象長度不是較短的對象長度的倍數

如果我一次刪除一個元素,則效果很好。 喜歡:

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

->“交叉口”的第一項消失了(405)。

因此,我可以實現一個for循環並逐個刪除條目,但這會花費很長時間。 有沒有更好的方法來構建所需的子集?

感謝所有幫助者!

只需使用常規的set操作即可:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM