2009-10-02 9 views
6

Sto tentando di trovare gli elementi che non sono comuni tra più vettori. Cioè, voglio sapere esattamente gli elementi (non solo la loro posizione, ecc.) Che non sono condivisi su tutti i vettori.Ricerca di elementi non comuni tra più vettori

La migliore implementazione che ho potuto ottenere utilizza un ciclo nidificato, che realizzo è probabilmente il meno efficiente, in particolare perché l'esecuzione è ancora in esecuzione mentre scrivo questo. Ecco cosa mi è venuto in mente. (ogni * .id è un vettore di ID caso della Corte suprema memorizzato come stringhe).

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) 

Ci deve essere un modo più efficiente per farlo?

risposta

3

Cercando di trovare casi in cui non sono stati coinvolti tutti i giudici della Corte Suprema? Non supponiamo di avere un piccolo set di dati di esempio che potresti aggiungere?

Un pensiero: rbind i vettori uno sopra l'altro in modo da avere un set di dati come data.frame ("justice", "case"). Quindi utilizzare il pacchetto reshape di hadley (utilizzare la funzione cast) per sommare il numero di giudici per caso. Ogni caso con meno del numero totale di giudici sarà un "caso negativo".

+6

... o combinarli tutti in un vettore (ad esempio con 'unlist') e fare un conteggio con' table'. –