ver studio seleccionar nombres matrices listas leer infinito funcion filas data contar columnas r sorting matrix indices

studio - Obtenga índices de K elementos más pequeños o más grandes en cada fila de una matriz en R



seleccionar columnas en r (2)

apply(mat, 1, which.max) #.....largest apply(mat, 1, which.min) #.....smallest t(apply(mat, 1, sort)[ 1:2, ]) # 2 smallest in each row t(apply(mat, 1, order)[ 1:2, ]) # indices of 2 smallest in each row

Además de usar decreasing = TRUE, también podría haber usado esto para los dos más grandes en una fila:

t(apply(mat, 1, order)[ 5:4, ])

¿Cómo obtener índices de K elementos más pequeños o más grandes en cada fila de una matriz en R?

Por ejemplo, tengo matriz

2 3 1 65 2 46 7 9 3 2 9 45 3 5 7 24 65 87 3 6 34 76 54 33 6

Me gustaría obtener una matriz de Índices de, digamos, 2 elementos más pequeños (rompiendo lazos de cualquier forma) en cada fila. el resultado debe estar en el siguiente formato:

3 1 5 4 3 4 4 5 5 4

Intenté algunos comandos usando sort , apply , arrayInd , etc., pero todavía no arrayInd obtener el resultado deseado. Cualquier ayuda es bienvenida.


Qué pasa

  • encontrar los índices de k valores más grandes en cada fila

    apply(mat, 1, function(x, k) which(x <= max(sort(x, decreasing = F)[1:k]), arr.ind = T), k)`

  • encontrar los índices de k valores más pequeños en cada fila

    apply(mat, 1, function(x, k) which(x >= min(sort(x, decreasing = T)[1:k]), arr.ind = T), k)`

En su ejemplo, para k <- 2 , el primero da como resultado

[,1] [,2] [,3] [,4] [,5] [1,] 2 1 1 2 2 [2,] 4 3 2 3 3

y el último resultados en

[[1]] [1] 1 3 5 [[2]] [1] 4 5 [[3]] [1] 3 4 [[4]] [1] 4 5 [[5]] [1] 4 5

Cambie el segundo parámetro de la aplicación de 1 a 2 para buscar las columnas.