values times studio many how data column cases appears r count unique

times - r data table count distinct



Contar valores Ășnicos (11)

Es un enfoque de una línea al usar aggregate .

> aggregate(data.frame(count = v), list(value = v), length) value count 1 1 25 2 2 75

Digamos que tengo:

v = rep(c(1,2, 2, 2), 25)

Ahora, quiero contar la cantidad de veces que aparece cada valor único. unique(v) devuelve cuáles son los valores únicos, pero no cuántos son.

> unique(v) [1] 1 2

Quiero algo que me dé

length(v[v==1]) [1] 25 length(v[v==2]) [1] 75

pero como un one-liner más general :) Algo cercano (pero no del todo) como este:

#<doesn''t work right> length(v[v==unique(v)])


Esto funciona para mí Toma tu vector v

length(summary(as.factor(v),maxsum=50000))

Comentario: configure maxsum para que sea lo suficientemente grande como para capturar el número de valores únicos

o con el paquete magrittr

v %>% as.factor %>% summary(maxsum=50000) %>% length


La función table () es una buena forma de hacerlo, como Chase sugirió. Si está analizando un conjunto de datos grande, una forma alternativa es usar la función .N en el paquete datatable.

Asegúrese de haber instalado el paquete de la tabla de datos

install.packages("data.table")

Código:

# Import the data.table package library(data.table) # Generate a data table object, which draws a number 10^7 times # from 1 to 10 with replacement DT<-data.table(x=sample(1:10,1E7,TRUE)) # Count Frequency of each factor level DT[,.N,by=x]


Para obtener un vector entero no dimensionado que contiene el recuento de valores únicos, use c() .

dummyData = rep(c(1, 2, 2, 2), 25) # Chase''s reproducible data c(table(dummyData)) # get un-dimensioned integer vector 1 2 25 75 str(c(table(dummyData)) ) # confirm structure Named int [1:2] 25 75 - attr(*, "names")= chr [1:2] "1" "2"

Esto puede ser útil si necesita alimentar los recuentos de valores únicos en otra función, y es más corto y más idiomático que el t(as.data.frame(table(dummyData))[,2] publicado en un comentario a la respuesta de Chase Gracias a Ricardo Saporta que me señaló esto here .


Puedes probar también un tidyverse

library(tidyverse) dummyData %>% as.tibble() %>% count(value) # A tibble: 2 x 2 value n <dbl> <int> 1 1 25 2 2 75


Quizás la mesa es lo que buscas?

dummyData = rep(c(1,2, 2, 2), 25) table(dummyData) # dummyData # 1 2 # 25 75 ## or another presentation of the same data as.data.frame(table(dummyData)) # dummyData Freq # 1 1 25 # 2 2 75


Si desea ejecutar unique en un data.frame (p. Ej., Train.data) y también obtener los recuentos (que pueden usarse como el peso en clasificadores), puede hacer lo siguiente:

unique.count = function(train.data, all.numeric=FALSE) { # first convert each row in the data.frame to a string train.data.str = apply(train.data, 1, function(x) paste(x, collapse='','')) # use table to index and count the strings train.data.str.t = table(train.data.str) # get the unique data string from the row.names train.data.str.uniq = row.names(train.data.str.t) weight = as.numeric(train.data.str.t) # convert the unique data string to data.frame if (all.numeric) { train.data.uniq = as.data.frame(t(apply(cbind(train.data.str.uniq), 1, function(x) as.numeric(unlist(strsplit(x, split=",")))))) } else { train.data.uniq = as.data.frame(t(apply(cbind(train.data.str.uniq), 1, function(x) unlist(strsplit(x, split=","))))) } names(train.data.uniq) = names(train.data) list(data=train.data.uniq, weight=weight) }


Si necesita tener el número de valores únicos como una columna adicional en el marco de datos que contiene sus valores (una columna que puede representar el tamaño de muestra, por ejemplo), plyr proporciona una manera ordenada:

data_frame <- data.frame(v = rep(c(1,2, 2, 2), 25)) library("plyr") data_frame <- ddply(data_frame, .(v), transform, n = length(v))


Si tiene múltiples factores (= un marco de datos multidimensional), puede usar el paquete dplyr para contar valores únicos en cada combinación de factores:

library("dplyr") data %>% group_by(factor1, factor2) %>% summarize(count=n())

Utiliza el operador de tubería %>% para llamar al método de cadena en los datos del marco de data .


También haría que los valores categóricos y llamar a summary() funcionarían.

> v = rep(as.factor(c(1,2, 2, 2)), 25) > summary(v) 1 2 25 75


count_unique_words <-function(wlist) { ucountlist = list() unamelist = c() for (i in wlist) { if (is.element(i, unamelist)) ucountlist[[i]] <- ucountlist[[i]] +1 else { listlen <- length(ucountlist) ucountlist[[i]] <- 1 unamelist <- c(unamelist, i) } } ucountlist } expt_counts <- count_unique_words(population) for(i in names(expt_counts)) cat(i, expt_counts[[i]], "/n")