通过向量从矩阵中提取重复的子集

时间:2014-03-05 21:14:22

标签: r subset

代码:

a <- matrix(1:10, nrow=5)
b <- c(1, 4, 1)
a[a[, 1]%in%b, ]

答案是:

     [, 1] [, 2]
[1, ] 1      6
[2, ] 4      9

预期产出:

     [, 1] [, 2]
[1, ] 1      6
[2, ] 4      9
[3, ] 1      6

这意味着,向量b中的最后1个也应该得到相应的值。 但是使用%in%,似乎删除了重复的1,我想保留 此值,并在生成的矩阵中获得3行。

2 个答案:

答案 0 :(得分:1)

通过data.table实现语法糖(连同超速):

library(data.table)

a = as.data.table(a)
setkey(a, V1)

a[J(b)]
#   V1 V2
#1:  1  6
#2:  4  9
#3:  1  6

如果b也是data.table,那就更好了:

b = as.data.table(b)

a[b]
#   V1 V2
#1:  1  6
#2:  4  9
#3:  1  6

答案 1 :(得分:0)

我认为你过度复杂化了,请尝试:a[b, ]

编辑:正如@eddi所指出的那样,上面只是意外运作。

以下是使用sapply的另一种方式:

t(sapply(b,function(x){
  a[a[,1]==x,]
}))