2010-07-05 21 views
5

¿Hay una manera simple de identificar el número de veces que un valor está en un vector o columna de marco de datos? Básicamente quiero los valores numéricos de un histograma, pero no sé cómo acceder a él.¿Cómo puedo contar la cantidad de veces que se produce un valor en una columna de un marco de datos?

# sample vector 
a <- c(1,2,1,1,1,3,1,2,3,3) 

#hist 
hist(a) 

Gracias.

ACTUALIZACIÓN:

Por sugerencia de Dirk estoy usando hist. ¿Hay una mejor manera que especificar el rango como 1.9, 2.9, etc. cuando sé que todos mis valores son enteros?

hist(a, breaks=c(1,1.9,2.9,3.9,4.9,5.9,6.9,7.9,8.9,9.9), plot=FALSE)$counts 
+0

gracias a todos por sus sugerencias. No sé lo suficiente sobre este tema para comprender las sutilezas de la tabla v hist; y se encuentra más fácil de usar, por lo tanto, lo marcó como la mejor respuesta. – djq

Respuesta

8

Prueba esto:

R> a <- c(1,2,1,1,1,3,1,2,3,3) 
R> b <- hist(a, plot=FALSE) 
R> str(b) 
List of 7 
$ breaks  : num [1:5] 1 1.5 2 2.5 3 
$ counts  : int [1:4] 5 2 0 3 
$ intensities: num [1:4] 1 0.4 0 0.6 
$ density : num [1:4] 1 0.4 0 0.6 
$ mids  : num [1:4] 1.25 1.75 2.25 2.75 
$ xname  : chr "a" 
$ equidist : logi TRUE 
- attr(*, "class")= chr "histogram" 
R> 

R es y la mayoría de los métodos que dan resultados significativos posterior orientada a objetos. Usalos, usalos a ellos.

+0

Creo que usar hist es una mala idea, porque calcula recuentos de contenedores, no cuenta de valores particulares. – mbq

+0

Gracias Dirk - Entiendo que R está orientado a objetos, pero no sé cómo descubrir que plot = FALSE es un argumento que puedo pasar a hist, por ejemplo. – djq

+3

Prueba 'help (hist)'. –

20

Utilice table function.

+0

Como estabas robando mi sugerencia de 'hist' (¡¡¡aunque eso fue lo que OP me preguntó !!), déjenme mencionar que' table() 'también tiene una desventaja oscura: alguna vez lo intenté con miles de valores únicos en el objeto que estás tabulando? ;-) Al final del día, ambos son valiosos, pero para diferentes propósitos. Como son 'cut()', 'quantile()' etc pp –

+0

Estoy satisfecho con cualquier método que devuelva el recuento de la cantidad de valores, y parece que puedo controlar el número de interrupciones. Sin embargo, no entiendo el resultado de hist: p. hist (a, breaks = 3, plot = FALSE) $ conteos devuelve 5 2 0 3 – djq

+0

@Dirk No estaba delatando; en mi opinión, usar tabla es una respuesta genérica e hist es una optimización para el caso cuando la cantidad de valores únicos es grande; de hecho, luchar contra contenedores cuando tienes pocos números para contar no es en absoluto elegante y puede ser incluso ineficiente. – mbq

5

Si desea utilizar hist que no es necesario especificar los descansos como lo hizo, sólo tiene que utilizar la función seq

br <- seq(0.9, 9.9, 1) 
num <- hist(a, br, plot=F)$counts 

Además, si usted está buscando un valor específico también se puede utilizar which.

Por ejemplo:

num <- length(which(a == 1)) 
2

Además de la diferencia de rendimiento entre hist y table en el caso de muchos valores únicos que Dirk y MBq ya se ha señalado, también me gustaría mencionar otro diferencia en la funcionalidad .

hist$counts también le dará cero recuentos para los contenedores que no tienen ningún caso. Esto puede ser muy valioso en el caso en que desee tener confianza sobre el número de contenedores (barras en una barra de barras, por ejemplo) que terminarán en el siguiente gráfico.

table, por el contrario, solo le dará los recuentos de los valores existentes.

Es posible que también desee comprobar la opción right de hist que controla si sus interrupciones (intervalos) se cerrarán correctamente o no.

Cuestiones relacionadas