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

R 通过向量从矩阵中提取重复子集,r,subset,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 [3, ] 1 6 这意味着,向量b中的最后1也应该得到相应的值。 但是使用%中的%,似乎重复的1已被删除,我想保留 使用此值,并在生成的矩阵中获得3行。我认为您过于复杂了,请尝试:a[b,] 编辑:正如@eddi所指出的那样,上面的内容只是

守则:

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

     [, 1] [, 2]
[1, ] 1      6
[2, ] 4      9
[3, ] 1      6
这意味着,向量b中的最后1也应该得到相应的值。 但是使用%中的
%,似乎重复的1已被删除,我想保留

使用此值,并在生成的矩阵中获得3行。

我认为您过于复杂了,请尝试:
a[b,]

编辑:正如@eddi所指出的那样,上面的内容只是偶然发生的

下面是使用sapply的另一种方法:

t(sapply(b,function(x){
  a[a[,1]==x,]
}))
通过
数据可以实现这方面的语法糖分(以及超高速)。表

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

这只会意外地起作用(我假设OP正在寻找合并,而不是选择特定的行);现在,如果这些是
数据。table
,它会起作用。真的,晚上太晚了,最好还是看电视:)假设你想匹配值,而不是选择行,那么用矩阵很难做到这一点,用数据做这一点要容易得多。frame's,甚至更容易用数据。table's-搜索“merge”等等
b = as.data.table(b)

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