2009-10-02 12 views
6

Estoy intentando encontrar los elementos que no son comunes en varios vectores. Es decir, quiero saber exactamente los elementos (no solo su posición, etc.) que no se comparten en todos los vectores.Encontrar elementos poco comunes en varios vectores

La mejor implementación que pude encontrar utiliza un bucle anidado, que me doy cuenta es probablemente el menos eficiente, más notablemente porque la ejecución todavía se está ejecutando mientras escribo esto. Esto es lo que se me ocurrió. (cada * .id es un vector de las identificaciones de casos de la Corte Suprema almacenadas como cadenas).

check.cases<-TRUE 

if(check.cases) { 
    all.cases<-c(AMKennedy.id,AScalia.id,CThomas.id,DHSouter.id,JGRoberts.id,JPStevens.id,RBGinsburg.id,SAAlito.id,SGBreyer.id) 
    bad.cases<-c() 
    for(b in all.cases) { 
     for(t in all.cases) { 
      m<-match(t,b) 
      bad<-t[which(is.na(m))] 
      bad.cases<-append(bad.cases,bad) 
     } 
    } 
    bad.cases<-unique(bad.cases) 
} 

print(bad.cases) 

Debe haber una manera más eficiente de hacer esto?

Respuesta

3

¿Tratando de encontrar casos en los que no participaron todos los jueces de la Corte Suprema? ¿No supone que tiene un pequeño conjunto de datos de muestra que podría agregar?

Un pensamiento: rbind los vectores uno encima del otro para que tenga un conjunto de datos como data.frame ("justicia", "caso"). Luego use el paquete reshape de hadley (use la función cast) para sumar el número de jueces por caso. Cualquier caso con menos del número total de jueces será un "caso malo".

+6

... o simplemente combínelas todas en un solo vector (digamos con 'unlist') y haga un recuento con 'table'. –

Cuestiones relacionadas