1

我有一个向量(A,比如一个更大矩阵的列名)和一个矩阵(B)。

A = q,w,e,r,t

乙 =

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

我将 A 与 B 的第一列相匹配

匹配AB =

      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 所问:

输入(一)

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

输入(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"
4

2 回答 2

2

有时参数的顺序需要与您最初认为的相反:

> 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" 
于 2012-11-02T07:10:54.633 回答
1

dput当您发布问题时,按照 mnel 的建议使用非常有帮助。

您的问题实际上是关于索引的。首先,我将展示我将如何做到这一点,然后将其分解:

您的数据重新创建(请从现在开始使用 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%运算符将 B 的第 1 列中的元素与 A 匹配,并且作为一个因素,该顺序得到遵守:

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
于 2012-11-02T06:06:54.120 回答