2

使用 apply 函数似乎应该非常简单,但我发现自己正在为此苦苦挣扎。

我有一个数据矩阵(数据框也可以):

u <- matrix(sample(seq(4),20,T),5,4)
u
     [,1] [,2] [,3] [,4]
[1,]    1    2    4    2
[2,]    4    3    2    2
[3,]    3    3    3    1
[4,]    3    2    4    4
[5,]    4    1    3    4

假设我只想使用列 j 的元素(如 excel 中的间接元素)从每一行中选择相应的列值。

例如给定 col(j) = 3

第 1 行将获取对应于 row=1,col(j=3)=4 的元素并返回 2 (row(1):col(4))

第 2 行将获取对应于 row=2,col(j=3)=2 的元素并返回 3 (row(2):col(2))

...

第 5 行将获取对应于 row=5,col(j=3)=3 的元素并返回 3 (row(5),col(3))

我最终得到了这些值的向量 v<-c(4,2,...3)

4

2 回答 2

5

您可以使用矩阵索引:

i <- seq_len(nrow(u))
j <- u[, 3]
u[cbind(i, j)]
于 2013-03-01T02:24:30.097 回答
1

我认为以下方法也有效:

sapply(1:nrow(u), function(i) u[i,u[i,3]])
于 2013-03-01T02:32:07.037 回答