Извлечь «зубчатый» столбец из R data.frame / matrix, используя вектор номеров столбцов - PullRequest
2 голосов
/ 24 августа 2010

У меня есть data.frame x в R, для которого dim (x) = (m, n) и вектор y чисел длины m со значениями от 1 до n. Другими словами, у есть запись для каждой строки в x, и каждое значение является допустимым номером столбца в x. Я хотел бы извлечь "зубчатый" столбец чисел из х, используя номера столбцов в у. Например, если

y <- c(2,4,1,6,5) 

тогда я бы хотел получить вектор чисел, равный

c(x[1,2],x[2,4],x[3,1],x[4,6],x[5,5])

Какой самый эффективный способ сделать это?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 24 августа 2010
> x <- matrix(rnorm(5 * 6), nrow = 5)
> x
            [,1]       [,2]       [,3]       [,4]       [,5]       [,6]
[1,] -0.8781820  0.4874737  0.5161918  0.5905719  0.1346253 -0.8108332
[2,]  1.2811044  0.2700776 -0.5694690 -1.2984173 -0.3491372  0.2315443
[3,]  1.1113906 -1.2589781  1.0206620  0.3396931 -0.7466635 -0.4369746
[4,]  0.2494311 -0.9985038 -0.7322118  0.3400631  1.0992965 -1.2063930
[5,]  0.5162947 -0.1346913  0.6835899  2.1042772 -1.5342266 -1.0558785
> y <- c(2,4,1,6,5)
> x[cbind(seq(y), y)]
[1]  0.4874737 -1.2984173  1.1113906 -1.2063930 -1.5342266
0 голосов
/ 24 августа 2010

Если я вас правильно понял, вы хотите получить значения из диагонали фрейма данных, который вы получаете при перемешивании столбцов?Или что-то в этом роде?

Iff x[,y] всегда будет квадратным, тогда это должно работать:

diag.index <- diag(nrow = length(y)) == 1
x[ ,y][diag.index]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...