[R-es] seleccionar datos

Jorge Virto Moreno jorge.virto en ehu.es
Sab Ene 16 17:02:49 CET 2010


Hola José Miguel,

si tienes los datos en una matriz es relativamente sencillo resolver  
tu problema usando la opción duplicated, que te da un índice con los  
elemntos repetidos.

Por ejemplo:

> datos <- matrix(data=c(1007,2,6,2,3,2,1,6,1100,1300,650,
+ 1007,2,6,3,2,2,1,6,200,1300,650,
+ 1058,1,1,2,3,1,1,6,2000,2000,2000,
+ 1438,1,1,2,5,1,1,6,300,300,300,
+ 1451,1,1,2,3,1,1,6,1747,1747,1747,
+ 1670,2,1,2,5,1,1,6,750,1185,592.5,
+ 1670,2,6,2,4,1,1,6,435,1185,592.5,
+ 1808,2,1,1,5,1,1,6,480,690,345,
+ 1808,2,6,1,5,1,1,6,210,690,345,
+ 1994,1,1,1,4,1,1,6,650,650,650),byrow=T,nrow=10)
> datos
       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]  [,11]
  [1,] 1007    2    6    2    3    2    1    6 1100  1300  650.0
  [2,] 1007    2    6    3    2    2    1    6  200  1300  650.0
  [3,] 1058    1    1    2    3    1    1    6 2000  2000 2000.0
  [4,] 1438    1    1    2    5    1    1    6  300   300  300.0
  [5,] 1451    1    1    2    3    1    1    6 1747  1747 1747.0
  [6,] 1670    2    1    2    5    1    1    6  750  1185  592.5
  [7,] 1670    2    6    2    4    1    1    6  435  1185  592.5
  [8,] 1808    2    1    1    5    1    1    6  480   690  345.0
  [9,] 1808    2    6    1    5    1    1    6  210   690  345.0
[10,] 1994    1    1    1    4    1    1    6  650   650  650.0
>
> duplicated(datos[,1])
  [1] FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE
>
> datos[duplicated(datos[,1])==F,]
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]  [,11]
[1,] 1007    2    6    2    3    2    1    6 1100  1300  650.0
[2,] 1058    1    1    2    3    1    1    6 2000  2000 2000.0
[3,] 1438    1    1    2    5    1    1    6  300   300  300.0
[4,] 1451    1    1    2    3    1    1    6 1747  1747 1747.0
[5,] 1670    2    1    2    5    1    1    6  750  1185  592.5
[6,] 1808    2    1    1    5    1    1    6  480   690  345.0
[7,] 1994    1    1    1    4    1    1    6  650   650  650.0

Espero que te valga,

Jorge


> José Miguel Contreras García <jmcontreras en ugr.es> escribió:

>
>
>
> Tengo un problemilla, aparentamente tonto pero no logro resolverlo.
>
> Imaginaros que teneis:
>
> 1007 2 6 2 3 2 1 6 1100 1300 650
> 1007 2 6 3 2 2 1 6 200 1300 650
> 1058 1 1 2 3 1 1 6 2000 2000 2000
> 1438 1 1 2 5 1 1 6 300 300 300
> 1451 1 1 2 3 1 1 6 1747 1747 1747
> 1670 2 1 2 5 1 1 6 750 1185 592.5
> 1670 2 6 2 4 1 1 6 435 1185 592.5
> 1808 2 1 1 5 1 1 6 480 690 345
> 1808 2 6 1 5 1 1 6 210 690 345
> 1994 1 1 1 4 1 1 6 650 650 650
>
> Como veis se repite el primer elemento de algunas columnas, pues quiero
> hacer un bucle que me cree una tabla con solo la 1ª fila para cada valor
> que se repite, es decir que quede:
>
>
> 1007 2 6 2 3 2 1 6 1100 1300 650
> 1058 1 1 2 3 1 1 6 2000 2000 2000
> 1438 1 1 2 5 1 1 6 300 300 300
> 1451 1 1 2 3 1 1 6 1747 1747 1747
> 1670 2 1 2 5 1 1 6 750 1185 592.5
> 1808 2 1 1 5 1 1 6 480 690 345
> 1994 1 1 1 4 1 1 6 650 650 650
>
> Lo estoy intentando con
>
> for (i in 1:m) {
> levels(factor(hog[,1]))->kk
> write.table(kk, file="kk.txt",append=TRUE,row.names=FALSE,col.names=FALSE,
> quote = FALSE)
> }
>
>
> o con
>
>
> for (j in 1:m-1){ subset (hog, hog[j,1]!=hog[j+1,1])-> hog2
> 		write.table(hog2,
> file="hog2.txt",append=TRUE,row.names=FALSE,col.names=FALSE, quote =
> FALSE)
> 			}
> as.matrix(read.table("hog2.txt"))->hog2
>
>
>
> pero nada.
>
> Gracias
> --
>                              \|||/
>                              (o o)
> +-----------------------oOOo-(_)-oOOo------------------------------+
> | José Miguel Contreras                                            |
>
> | e-mail: jmcontreras en ugr.es                                       |
> |                                                |
> +----------------------oooO-------Oooo-----------------------------+
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>



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