简体   繁体   English

有效搜索矩阵中的有序向量

[英]Efficient search of ordered vectors in a matrix

I have a matrix consisting of rows of ordered vectors: 我有一个由有序向量行组成的矩阵:

v1 v2 v3 v4 v5 v6 v7 v8 v9 .... v45 v46 v47 v48
1  2  2  2  2  3  NA 3  3  ....  4   4   NA  NA
3  3  4  4  4  NA NA NA NA ....  5   NA  NA  NA
4  4  4  5  5  5  5  5  5  ....  NA  NA  NA  NA
...

I want to find an efficient way in R to subset records with an ordered vector (3,4) (ie a 3 before a 4) through the matrix using R such that 我想在R中找到一种有效的方法来通过矩阵使用R来排序矩阵中具有有序向量(3,4)(即3在4之前的3)的子集记录,从而

1  2  2  2  2  3  NA 3  3  ....  4   4   NA  NA
3  3  4  4  4  NA NA NA NA ....  5   NA  NA  NA

will be subsetted. 将被子集化。 If I subsetted a vector (1,2,3) (ie 1 before 2 and then 3), I will want to return this row: 如果我将向量(1,2,3)子集化(即1在2之前,然后是3),则我想返回此行:

1  2  2  2  2  3  NA 3  3  ....  4   4   NA  NA

Maybe you want this? 也许你想要这个?

set.seed(1)
data <- matrix(sample(1:10, 100, replace=TRUE), ncol=5)

searchfor <- c(1,2,3)
data[apply(data, 1, function(x) all(searchfor %in% x)),]

Output 产量

[,1] [,2] [,3] [,4] [,5]   # empty

Another vector 另一个向量

searchfor <- c(7,8,9)
data[apply(data, 1, function(x) all(searchfor %in% x)),]

Output 产量

     [,1] [,2] [,3] [,4] [,5]
[1,]    7    9    8    1    3
[2,]    5    7    1    9    8
[3,]    4    8    7    8    9

Data 数据

      [,1] [,2] [,3] [,4] [,5]
 [1,]    3   10    9   10    5
 [2,]    4    3    7    3    8
 [3,]    6    7    8    5    4
 [4,]   10    2    6    4    4
 [5,]    3    3    6    7    8
 [6,]    9    4    8    3    3
 [7,]   10    1    1    5    8
 [8,]    7    4    5    8    2
 [9,]    7    9    8    1    3
[10,]    1    4    7    9    2
[11,]    3    5    5    4    3
[12,]    2    6    9    9    1
[13,]    7    5    5    4    7
[14,]    4    2    3    4    9
[15,]    8    9    1    5    8
[16,]    5    7    1    9    8
[17,]    8    8    4    9    5
[18,]   10    2    6    4    5
[19,]    4    8    7    8    9
[20,]    8    5    5   10    7

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM