[英]subset a matrix in a for loop with logical operator or (|)
我正在嘗試制作矩陣的子集。 每個子集取決於一組邏輯條件。 例如,第一個列表的第一個子集( R[[1]][[1]]
對應於矩陣的最后一列,等於1或3等。我想在循環中使用它。
這是我擁有的數據的示例:
l = list(
list(c(1, 3),c(2, 3)),
list(c(1,5),c(2,5,6,7),c(3,6,8),c(4,7,8))
)
a1 <- array(1, dim=c(12,10))
a2 <- array(1, dim=c(18,10))
v1 <- c(1,1,3,1,2,3,1,1,3,1,2,2)
v2 <- c(1,1,3,1,5,2,4,5,5,5,7,8,1,4,5,8,2,4)<br/>
m1 <- as.matrix(cbind(a1,v1))
m2 <- as.matrix(cbind(a2,v2))
m <- list(m1,m2)
這是我使用的代碼:
R <- rep(list(list()),length(m))
for(i in 1:length(m)) {
for(j in 1:length(l[[i]])) {
R[[i]][[j]] <- m[[i]][m[[i]][,dim(m[[i]])[2]] == l[[i]][[j]],]
}}
我得到以下不是我想要的結果:
[[1]]
[[1]][[1]]
[1,] 1 1 1 1 1 1 1 1 1 1 1
[2,] 1 1 1 1 1 1 1 1 1 1 3
[3,] 1 1 1 1 1 1 1 1 1 1 1
[[1]][[2]]
[1,] 1 1 1 1 1 1 1 1 1 1 2
[2,] 1 1 1 1 1 1 1 1 1 1 3
[3,] 1 1 1 1 1 1 1 1 1 1 2
[[2]]
[[2]][[1]]
[1,] 1 1 1 1 1 1 1 1 1 1 1
[2,] 1 1 1 1 1 1 1 1 1 1 5
[3,] 1 1 1 1 1 1 1 1 1 1 5
[4,] 1 1 1 1 1 1 1 1 1 1 1
[[2]][[2]]
[1,] 1 1 1 1 1 1 1 1 1 1 5
[2,] 1 1 1 1 1 1 1 1 1 1 2
[[2]][[3]]
1 1 1 1 1 1 1 1 1 1 8
[[2]][[4]]
[1,] 1 1 1 1 1 1 1 1 1 1 4
[2,] 1 1 1 1 1 1 1 1 1 1 7
[3,] 1 1 1 1 1 1 1 1 1 1 8
這是我想得到的結果:
[[1]]
[[1]][[1]]
[1,] 1 1 1 1 1 1 1 1 1 1 1
[2,] 1 1 1 1 1 1 1 1 1 1 1
[3,] 1 1 1 1 1 1 1 1 1 1 3
[4,] 1 1 1 1 1 1 1 1 1 1 1
[5,] 1 1 1 1 1 1 1 1 1 1 3
[6,] 1 1 1 1 1 1 1 1 1 1 1
[7,] 1 1 1 1 1 1 1 1 1 1 1
[8,] 1 1 1 1 1 1 1 1 1 1 3
[9,] 1 1 1 1 1 1 1 1 1 1 1
[[1]][[2]]
[1,] 1 1 1 1 1 1 1 1 1 1 3
[2,] 1 1 1 1 1 1 1 1 1 1 2
[3,] 1 1 1 1 1 1 1 1 1 1 3
[4,] 1 1 1 1 1 1 1 1 1 1 3
[5,] 1 1 1 1 1 1 1 1 1 1 2
[6,] 1 1 1 1 1 1 1 1 1 1 2
[[2]]
[[2]][[1]]
[1,] 1 1 1 1 1 1 1 1 1 1 1
[2,] 1 1 1 1 1 1 1 1 1 1 1
[3,] 1 1 1 1 1 1 1 1 1 1 1
[4,] 1 1 1 1 1 1 1 1 1 1 5
[5,] 1 1 1 1 1 1 1 1 1 1 5
[6,] 1 1 1 1 1 1 1 1 1 1 5
[7,] 1 1 1 1 1 1 1 1 1 1 5
[8,] 1 1 1 1 1 1 1 1 1 1 1
[9,] 1 1 1 1 1 1 1 1 1 1 5
[[2]][[2]]
[1,] 1 1 1 1 1 1 1 1 1 1 5
[2,] 1 1 1 1 1 1 1 1 1 1 2
[3,] 1 1 1 1 1 1 1 1 1 1 5
[4,] 1 1 1 1 1 1 1 1 1 1 5
[5,] 1 1 1 1 1 1 1 1 1 1 5
[6,] 1 1 1 1 1 1 1 1 1 1 7
[7,] 1 1 1 1 1 1 1 1 1 1 5
[8,] 1 1 1 1 1 1 1 1 1 1 2
[[2]][[3]]
[1,] 1 1 1 1 1 1 1 1 1 1 3
[2,] 1 1 1 1 1 1 1 1 1 1 8
[3,] 1 1 1 1 1 1 1 1 1 1 8
[[2]][[4]]
[1,] 1 1 1 1 1 1 1 1 1 1 4
[2,] 1 1 1 1 1 1 1 1 1 1 7
[3,] 1 1 1 1 1 1 1 1 1 1 8
[4,] 1 1 1 1 1 1 1 1 1 1 4
[5,] 1 1 1 1 1 1 1 1 1 1 8
[6,] 1 1 1 1 1 1 1 1 1 1 4
您在找這個嗎?
如果您想同樣地應用列表m
所有元素:
k<-lapply(m,function(x) x[x[,11] %in% c(1,3),])
> k
[[1]]
v1
[1,] 1 1 1 1 1 1 1 1 1 1 1
[2,] 1 1 1 1 1 1 1 1 1 1 1
[3,] 1 1 1 1 1 1 1 1 1 1 3
[4,] 1 1 1 1 1 1 1 1 1 1 1
[5,] 1 1 1 1 1 1 1 1 1 1 3
[6,] 1 1 1 1 1 1 1 1 1 1 1
[7,] 1 1 1 1 1 1 1 1 1 1 1
[8,] 1 1 1 1 1 1 1 1 1 1 3
[9,] 1 1 1 1 1 1 1 1 1 1 1
[[2]]
v2
[1,] 1 1 1 1 1 1 1 1 1 1 1
[2,] 1 1 1 1 1 1 1 1 1 1 1
[3,] 1 1 1 1 1 1 1 1 1 1 3
[4,] 1 1 1 1 1 1 1 1 1 1 1
[5,] 1 1 1 1 1 1 1 1 1 1 1
這是使用%in%
對我有用的解決方案:
R <- rep(list(list()),length(m)) <br/>
for(i in 1:length(m)) { <br/>
for(j in 1:length(l[[i]])) { <br/>
R[[i]][[j]] <- m[[i]][m[[i]][,dim(m[[i]])[2]] %in% l[[i]][[j]],] <br/>
}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.