R 跨不同行和列的多个矩阵元素

R 跨不同行和列的多个矩阵元素,r,matrix,subset,apply,R,Matrix,Subset,Apply,我试图在R中的矩阵或数据帧中的列之间提取特定的行元素。一个简化的示例是: dat<-rbind(rnorm(10, 0, 1), rnorm(10, 0, 1)) rown<-c(1,1,1,2,2,1,1,1,1,2) 但我知道一定有一种方法可以用apply或类似的东西来实现这一点。但是,我不知道如何将rown的元素合并到apply函数中。如果dat是列的列表,我也可以很容易地使用mapply实现这一点,但这也不理想。我们可以使用cbind创建行/列索引矩阵,并使用它来子集值

我试图在R中的矩阵或数据帧中的列之间提取特定的行元素。一个简化的示例是:

dat<-rbind(rnorm(10, 0, 1), rnorm(10, 0, 1))

rown<-c(1,1,1,2,2,1,1,1,1,2)

但我知道一定有一种方法可以用apply或类似的东西来实现这一点。但是,我不知道如何将rown的元素合并到apply函数中。如果dat是列的列表,我也可以很容易地使用mapply实现这一点,但这也不理想。

我们可以使用
cbind
创建行/列索引矩阵,并使用它来子集值

dat[cbind(rown, seq_len(ncol(dat)))]
#Equivalent call and maybe easy to understand
#dat[cbind(rown, 1:ncol(dat))]
#[1] -0.560 -0.230  1.559  0.111 -0.556  1.715  0.461 -1.265 -0.687 -0.473
数据

set.seed(123)
dat<-rbind(rnorm(10, 0, 1), rnorm(10, 0, 1))
set.seed(123)
dat
set.seed(123)
dat<-rbind(rnorm(10, 0, 1), rnorm(10, 0, 1))