簡體   English   中英

R::如何將一個矩陣的行與另一個矩陣的行進行匹配,而不管列順序如何?

[英]R::How would I match the rows of one matrix to the rows in another matrix, regardless of the column order?

我有兩個矩陣,我需要找出一個矩陣中的兩列集合是否出現在另一個矩陣中,而不考慮順序 (A:B = B:A)。

例如,這里有兩個矩陣:

X <- matrix(c(23, 33, 4, 21, 5, 27, 47, 39, 37, 8, 30, 42, 59, 63, 53, 50, 49, 65, 53, 59), nrow = 10, ncol = 2, byrow = F)
Y <- matrix(c(30, 21, 53, 23, 63, 37), nrow = 3, ncol = 2, byrow = F)
> X
      [,1] [,2]
 [1,]   23   30
 [2,]   33   42
 [3,]    4   59
 [4,]   21   63
 [5,]    5   53
 [6,]   27   50
 [7,]   47   49
 [8,]   39   65
 [9,]   37   53
[10,]    8   59
> Y
     [,1] [,2]
[1,]   30   23
[2,]   21   63
[3,]   53   37

例如,我希望能夠在 X 中找到 Y[1,],無論它是 {30,23} 還是 {23,30}。

我嘗試過mergeintersectsetdiff ,但這些都不會返回所有可能的匹配項。

> merge(data.frame(X),data.frame(Y))
  X1 X2
1 21 63
> merge(data.frame(Y),data.frame(X))
  X1 X2
1 21 63
> intersect(data.frame(X),data.frame(Y))
  X1 X2
1 21 63
> intersect(data.frame(Y),data.frame(X))
  X1 X2
1 21 63
> setdiff(data.frame(Y),data.frame(X))
  X1 X2
1 30 23
2 53 37
> setdiff(data.frame(X),data.frame(Y))
  X1 X2
1 23 30
2 33 42
3  4 59
4  5 53
5 27 50
6 47 49
7 39 65
8 37 53
9  8 59 

最終目標是識別 X 中包含匹配項(有或沒有內容)的行。 因此,在偽代碼中,它將是:

對於 X 中的每個 Y[i,]
返回行號 X

任何幫助將不勝感激。

我們可以在每個數據集上按行sort

x1 <- t(apply(X, 1, sort))
y1 <- t(apply(Y, 1, sort))

然后對每個數據集的paste d 行進行match以返回匹配的行索引

match(do.call(paste, as.data.frame(y1)), do.call(paste, as.data.frame(x1)))
#[1] 1 4 9

您可以使用在對每一行進行排序並證明X數據幀的行索引之后嘗試的merge方法。

x1 <- transform(data.frame(t(apply(X, 1, sort))), row = 1:nrow(X))
y1 <- data.frame(t(apply(Y, 1, sort)))
merge(x1, y1)

#  X1 X2 row
#1 21 63   4
#2 23 30   1
#3 37 53   9

暫無
暫無

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

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