[R-es] Selección de observaciones

Jorge Virto jorge.virto en ehu.es
Vie Oct 8 14:11:33 CEST 2010


Hola Ignacio,

no sé si existe una solución más elegante que la que propones. Para 
seleccionar sobre varias columnas debes comparar en varias columnas.
Lo único que se me ocurre es que crees una función que te lo haga más 
elegante. Por ejemplo:

> aa <- matrix(11:19,3,3)
> 
> 
> # aa: matriz de datos
> # colu: el índice de columnas a comparar
> # dato: valores a comparar
> 
> selec <- function(aa,colu,dato){
+ for(i in 1:length(colu))
+ {aa <- subset(aa,aa[,colu[i]]==dato[i])}
+ aa
+ }
> 
> selec(aa,c(1,2),c(12,15))
     [,1] [,2] [,3]
[1,]   12   15   18
> selec(aa,c(1,2,3),c(13,16,19))
     [,1] [,2] [,3]
[1,]   13   16   19


¿Es algo así?

Jorge


El Friday 08 October 2010 12:00:17 Ignacio Ramos Alvarez escribió:
> Hola a todos.
> Estoy atascado en un sitio que no me he encontrado antes, debe ser fácil y
> rápido, a ver si alguien me puede ayudar.
>
> Puesto fácil, tengo:
> > aa <- matrix(11:19,3,3)
> > aa
>
>      [,1] [,2] [,3]
> [1,]   11   14   17
> [2,]   12   15   18
> [3,]   13   16   19
>
> Quiero la fila cuyo primer elemento es 12 y el segundo 15.
>
> > aa[aa[,1:2] == (c(12,15)),]
>
> Error: (subscript) logical subscript too long
>
> ¿Entonces?
>
> > aa[aa[,1:2] == t(c(12,15)),]
>
> Error in aa[, 1:2] == t(c(12, 15)) : non-conformable arrays
>
> Puedo hacer, claro,
>
> > aa[aa[,1]==12 & aa[,2]==15,]
>
> [1] 12 15 18
>
> Pero necesito algo más "elegante" ya que la selección es sobre bastantes
> más columnas.
>
> Gracias de antemano y un saludo.



Más información sobre la lista de distribución R-help-es