我有3个矩阵B
是数字类别,而m1
和m2
是不同的值。
我想为m1
中的每个类别(数字)提取m2
和B
的值。我为B中的每个类别(数字)创建了cols,并用它们的数字命名,然后用m1
和m2
B = matrix( c(2, 3, 3, 1, 2, 1,3,1), nrow=4, ncol=2)
m1<-matrix(nrow=4,ncol=2,data=runif(8))
m2<-matrix(nrow=4,ncol=2,data=runif(8))
> B
[,1] [,2]
[1,] 2 2
[2,] 3 1
[3,] 3 3
[4,] 1 1
> m1
[,1] [,2]
[1,] 0.02628084 0.7286645
[2,] 0.48612723 0.5551138
[3,] 0.54268103 0.0734144
[4,] 0.83666012 0.1365023
> m2
[,1] [,2]
[1,] 0.9753650 0.01225462
[2,] 0.3843785 0.64147320
[3,] 0.4886735 0.51257497
[4,] 0.4907762 0.32035212
期望的输出:
2 3 1
0.02628084(#corresponding value from m1) 0.48612723 0.83666012
0.9753650(#corresponding value from m2) 0.3843785 0.4907762
0.7286645 (#corresponding value from m1) 0.5551138 0.54268103
0.01225462 (#corresponding value from m2) 0.64147320 0.4886735
0.0734144 0.1365023
0.51257497 0.32035212
答案 0 :(得分:0)
我不确定这是不是你想要的。它会为您列出第一个元素,其中包含m1
和m2
中与B
中的1位于同一位置的值。第二个元素包含2的值,依此类推。
set.seed(123)
B = matrix( c(2, 3, 3, 1, 2, 1,3,1), nrow=4, ncol=2)
m1<-matrix(nrow=4,ncol=2,data=runif(8))
m2<-matrix(nrow=4,ncol=2,data=runif(8))
values <- sort(unique(sapply(B, function(x) x)))
l <- sapply(values, function(x) c(m1[B == x], m2[B == x]))
添加值名称:
names(l) <- values
答案 1 :(得分:0)
您对此解决方案和输出格式感到满意吗?
# data:
set.seed(123)
B = matrix( c(2, 3, 3, 1, 2, 1,3,1), nrow=4, ncol=2)
m1<-matrix(nrow=4,ncol=2,data=runif(8))
m2<-matrix(nrow=4,ncol=2,data=runif(8))
ml <- list(m1, m2)
ind <- sapply(unique(c(B)), function(x) which(B == x, arr.ind = TRUE))
res <- lapply(ind, function(x) lapply(ml, function(y) y[x]))
lapply(res, function(x) c(t(do.call(cbind, x))))
[[1]]
[1] 0.2875775 0.5514350 0.9404673 0.6775706
[[2]]
[1] 0.7883051 0.4566147 0.4089769 0.9568333 0.5281055 0.1029247
[[3]]
[1] 0.8830174 0.4533342 0.0455565 0.5726334 0.8924190 0.8998250
由于列的长度不同,您无法将其放入数据框或矩阵中。
使用的数据是(使用set.seed
生成样本会更容易):
m1
[,1] [,2]
[1,] 0.2875775 0.9404673
[2,] 0.7883051 0.0455565
[3,] 0.4089769 0.5281055
[4,] 0.8830174 0.8924190
> m2
[,1] [,2]
[1,] 0.5514350 0.6775706
[2,] 0.4566147 0.5726334
[3,] 0.9568333 0.1029247
[4,] 0.4533342 0.8998250
> B
[,1] [,2]
[1,] 2 2
[2,] 3 1
[3,] 3 3
[4,] 1 1