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.