Powiedzmy, że mam:
v = rep(c(1,2, 2, 2), 25)
Teraz chcę policzyć, ile razy pojawia się każda unikalna wartość. unique(v)
zwraca, jakie są unikalne wartości, ale nie ile ich jest.
> unique(v)
[1] 1 2
Chcę czegoś, co mi daje
length(v[v==1])
[1] 25
length(v[v==2])
[1] 75
ale jako bardziej ogólna linijka :) Coś bliskiego (ale nie całkiem) takiego:
#<doesn't work right> length(v[v==unique(v)])
hist
.table
wydaje się nieco wolniejszy niżhist
. Zastanawiam się dlaczego. Czy ktoś może potwierdzić?order()
na wynikach. tj.x <- as.data.frame(table(dummyData)); x[order(x$Freq, decreasing = TRUE), ]
Jeśli masz wiele czynników (= wielowymiarowa ramka danych), możesz użyć
dplyr
pakietu, aby policzyć unikalne wartości w każdej kombinacji czynników:Używa operatora potoku
%>%
do łączenia wywołań metod w ramce danychdata
.źródło
Jest to podejście jednowierszowe przy użyciu
aggregate
.źródło
Funkcja table () jest dobrym rozwiązaniem, jak zasugerował Chase . Jeśli analizujesz duży zbiór danych, alternatywnym sposobem jest użycie funkcji .N w pakiecie datatable.
Upewnij się, że zainstalowałeś pakiet tabeli danych przez
Kod:
źródło
Aby uzyskać bezwymiarowy wektor całkowity, który zawiera liczbę unikatowych wartości, użyj
c()
.Może to być przydatne, jeśli chcesz przekazać liczbę unikalnych wartości do innej funkcji i jest krótsze i bardziej idiomatyczne niż
t(as.data.frame(table(dummyData))[,2]
zamieszczone w komentarzu do odpowiedzi Chase. Dzięki Ricardo Saporta który wskazywał na to, aby mnie tutaj .źródło
To działa dla mnie. Weź swój wektor
v
length(summary(as.factor(v),maxsum=50000))
Komentarz: ustaw maksymalną sumę, aby była wystarczająco duża, aby uchwycić liczbę unikalnych wartości
lub z
magrittr
pakietemv %>% as.factor %>% summary(maxsum=50000) %>% length
źródło
Jeśli potrzebujesz mieć liczbę unikalnych wartości jako dodatkową kolumnę w ramce danych zawierającej twoje wartości (kolumnę, która może na przykład reprezentować rozmiar próbki), plyr zapewnia zgrabny sposób:
źródło
ddply(data_frame, .(v), count)
. Warto również wyraźnie powiedzieć, że potrzebujeszlibrary("plyr")
telefonu doddply
pracy.transform
zamiastmutate
podczas używaniaplyr
.Również nadanie wartości kategoriom i powołanie
summary()
się przyda.źródło
Możesz również wypróbować plik
tidyverse
źródło
Jeśli chcesz działać unikatowo w data.frame (np. Train.data), a także uzyskać liczby (które mogą być używane jako waga w klasyfikatorach), możesz wykonać następujące czynności:
źródło
length (unique (df $ col)) to najprostszy sposób, jaki widzę.
źródło
źródło