2012-06-21 7 views
5

Mam więc dwa wektory punktów danych i chciałbym utworzyć listę każdej unikalnej pary wraz z częstotliwością pary. Wiem, że mogę użyć tabeli do zrobienia tego z jednym z wektorów, ale nie mogę się domyślić, jak zrobić to z parami.Jak mogę utworzyć listę wszystkich unikalnych par punktów danych w R?

+1

'tablica' przyjmuje wiele argumentów i tworzy tabele krzyżowe. – cardinal

+2

Funkcja 'unique' jest przeciążona, aby zrobić to automatycznie. Jeśli wprowadzisz macierz, zwróci ona unikalne wiersze macierzy - to powinno rozwiązać twój problem. – Macro

+0

są wektorami o jednakowej długości? – JackeJR

Odpowiedz

8

to tylko ...

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) 

lub mówią twoi wektory są po prostu x i y i tylko ty chcesz mieć stół ...

table(x,y) 
+1

ah. "wyjątkowy". Kto by się domyślił? – crf

0

Jeśli vec1 i vec2 są wektory w pytaniu:

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