我在r中有一个大数组,并希望使用从不同矩阵获得的点对其进行子集化。
即。
,,1
34 1 1 3 4
32 1 3 4 5
23 1 1 3 4
35 1 3 4 4
23 1 2 3 4
,,2
234 1 1 3 4
32 1 3 4 5
324 1 1 3 4
23 1 3 4 4
232 1 2 3 4
并希望它返回
34 1 1 3 4
23 1 1 3 4
23 1 2 3 4
234 1 1 3 4
324 1 1 3 4
232 1 2 3 4
以某种格式。
这些特定行将根据我选择的最后3列返回 (即我想要所有行的最后3位数字1,3,4和2,3,4)
答案 0 :(得分:1)
一种方法是
m1 <- apply(ar1, 2, `[`)
m1[m1[,2]%in% 1:2 & m1[,3]==3 & m1[,4]==4,]
# [,1] [,2] [,3] [,4]
#[1,] 1 1 3 4
#[2,] 1 1 3 4
#[3,] 1 2 3 4
#[4,] 1 1 3 4
#[5,] 1 1 3 4
#[6,] 1 2 3 4
或者
res <- do.call(rbind,lapply(seq(dim(ar1)[3]), function(i) {
x1 <- ar1[,,i]
x2 <- t(x1[,-1])
x1[colSums(x2==c(1,3,4)|x2==c(2,3,4))==3,]}))
res
# [,1] [,2] [,3] [,4]
#[1,] 1 1 3 4
#[2,] 1 1 3 4
#[3,] 1 2 3 4
#[4,] 1 1 3 4
#[5,] 1 1 3 4
#[6,] 1 2 3 4
假设values
到match
在matrix
中,并且每行都是匹配的向量。
toMatch <- rbind(c(1,3,4), c(2,3,4), c(4,3,2), c(1,9,4))
indx1 <- apply(toMatch, 1, paste, collapse="")
res <- do.call(rbind,lapply(seq(dim(ar1)[3]), function(i) {
x1 <- ar1[,,i]
x1[apply(x1[,-1], 1, paste, collapse='') %in% indx1,]
}))
ar1 <- structure(c(1, 1, 1, 1, 1, 1, 3, 1, 3, 2, 3, 4, 3, 4, 3, 4, 5,
4, 4, 4, 1, 1, 1, 1, 1, 1, 3, 1, 3, 2, 3, 4, 3, 4, 3, 4, 5, 4,
4, 4), .Dim = c(5L, 4L, 2L))