2012-06-21 12 views
5

Quindi ho due vettori di punti dati, e vorrei fare una lista di ogni coppia unica, insieme alla frequenza di quella coppia. So che posso usare la tabella per farlo con uno dei vettori, ma non riesco a capire come farlo farlo con le coppie.Come posso creare un elenco di tutte le coppie uniche di punti dati in R?

+1

'table' prende più argomenti e cross-tabules. – cardinal

+2

la funzione 'unique' è sovraccaricata per farlo automaticamente. Se inserisci una matrice, restituirà le righe univoche della matrice: questo dovrebbe risolvere il tuo problema. – Macro

+0

sono i vettori di uguale lunghezza? – JackeJR

risposta

8

è solo ...

dat <- data.frame(x = sample(letters[1:3], size = 100, replace = TRUE), 
    y = sample(letters[1:3], size = 100, replace = TRUE)) 

unique(dat) 
table(dat) 

o, dicono i vettori sono solo x e y e solo tu voglio il tavolo ...

table(x,y) 
+1

ah. "unico". Chi avrebbe mai immaginato? – crf

0

Se vec1 e vec2 sono i vettori in questione:

points <- mapply(c, vec1, vec2, SIMPLIFY=FALSE) 
uniq.points <- unique(points) 
freqs <- sapply(uniq.points, FUN=function(point) length(which(points %in% list(point)))) 
cbind(do.call(rbind, uniq.points), freqs) # matrix of points and freqs 
2
# A sample dataset: 
dat <- data.frame(x = sample(letters, size = 1000, replace = TRUE), 
        y = sample(letters, size = 1000, replace = TRUE) 
) 

# Aggregating using just base R: 
as.data.frame(table(dat$x, dat$y)) 

# With plyr 
library(plyr) 
count(dat, vars = c(x, y)) 
count(dat) # Or, less generalizably 
Problemi correlati