2012-11-02 78 views
1

我有一個向量(A,比如一個較大矩陣的列名稱)和一個矩陣(B)。R匹配更改順序

A = Q,W,E,R,T

B =

q 1 
y 2 
w 3 
e 4 
u 5 
t 6 
r 7 

我匹配A與B的第一列

matchAB =

 q 1 
     w 3 
     i 4 
     e 5 
     t 6 
     r 7 

我只需要第二欄。並與A一起使用。如果您看到訂單不一樣。其中a = q,w,e,r,t。 matchAB,變成,q,w,e,t,r。我不想在A上按字母順序排序。我想讓matchAB具有與A相同的順序。 任何幫助?

謝謝!

由於提問者MNEL:

dput(一)

a =c("q", "w", "e", "r", "t") 

dput(B)

b <- structure(c("q", "1", "y", "2", "w", "3", "i", "4", "e", "5", 
    "t", "6", "r", "7"), .Dim = c(2L, 7L), .Dimnames = list(c("bi","bb"), NULL)) 


ind=which(match(b[1,],a) != 0) 

> b[,ind]= 

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

bi "q" "w" "e" "t" "r" 

bb "1" "3" "5" "6" "7" 

所以,我想要的輸出是,

b[,ind]= 

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

bi "q" "w" "e" "r" "t" 

bb "1" "3" "5" "7" "6" 
+1

認罪se通過發佈'dput(A)'和'dput(B)'以及您用於匹配的代碼來使您的示例具有可重現性。B'真的是一個矩陣還是一個data.frame? – mnel

+0

@Arshi最好將數據添加回原始問題中。 –

+0

謝謝泰勒!感謝mput for dput,我是R新手,並不知道它。 –

回答

1

當您發佈一個問題時,根據mnel的建議使用dput會非常有幫助。

你的問題真的是索引。首先,我會告訴我怎麼會做它,然後把它分解:重建

您的數據(請從現在開始使用1dput`):

B <- read.table(text="q 1 
y 2 
w 3 
e 4 
u 5 
t 6 
r 7", stringsAsFactors = TRUE) 

A <- c('q','w','e','r','t') 

如何我會做:

data.frame(A=A, B=B[B[, 1] %in% A, 2]) 

其分解: 通知我設置上面列的一個因素?這應該保留你的訂單。 首先%in%操作者A和 在B的1列的元素相匹配的一個因素的順序兌現:

B[, 1] %in% A 
# >  B[, 1] %in% A 
# [1] TRUE FALSE TRUE TRUE FALSE TRUE TRUE 

然後我用這個邏輯矢量B的一個新的索引的內部,並僅選擇第2列

B[B[, 1] %in% A, 2] 
# [1] 1 3 4 6 7 
1

有時候參數的順序必須是什麼,你首先想到的是相反的應該是:

> a = c('q','w','e','r','t'); b[, match(a,b[1,])] 
#------- 
    [,1] [,2] [,3] [,4] [,5] 
bi "q" "w" "e" "r" "t" 
bb "1" "3" "5" "7" "6"