Несколько матричных элементов в разных строках и столбцах - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь извлечь указанные c элементы строки по столбцам в матрице или кадре данных в R. Упрощенный пример:

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

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

, где я wi sh, чтобы вернуть указанный индекс строки через столбцы данных. Я могу сделать это с помощью al oop:

for(i in 1:spec.num){print(dat[,i][rown[i]])}

, но я знаю, что должен быть способ сделать это с помощью apply или чего-то подобного. Однако я не могу понять, как включить элементы rown в функцию apply. Я также мог бы легко сделать это с помощью mapply, если бы dat был списком столбцов, но это тоже не идеально.

1 Ответ

1 голос
/ 23 марта 2020

Мы можем использовать 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))
...