135 votos

Contar valores únicos en R

Digamos que tengo

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

Ahora, quiero contar el número de veces que aparece cada valor único. unique(c)  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 una línea más general :) Algo parecido (pero no del todo) a esto:

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

173voto

Chase Puntos 27342

¿Quizás lo que busca es una tabla?

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

21voto

SeaSprite Puntos 1

Se trata de un enfoque de una sola línea mediante el uso de aggregate .

> aggregate(data.frame(count = v), list(value = v), length)

  value count
1     1    25
2     2    75

8voto

Ben Puntos 8166

Para obtener un vector entero no dimensionado que contenga el recuento de valores únicos, utilice 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 introducir los recuentos de valores únicos en otra función, y es más corto y más idiomático que la función 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 aquí .

4voto

yoplait Puntos 113

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 la muestra, por ejemplo), plyr proporciona una forma clara:

data_frame <- data.frame(v = rep(c(1,2, 2, 2), 25))

library("plyr")
data_frame <- ddply(data_frame, .(v), transform, n = length(v))

-2voto

Michael Wise Puntos 1
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")

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X