2009-11-28 25 views
22

estoy mirando para conseguir un recuento de la siguiente trama de datos:recuento de entradas en la trama de datos en R

> Santa 
    Believe Age Gender Presents Behaviour 
1 FALSE 9 male  25 naughty 
2  TRUE 5 male  20  nice 
3  TRUE 4 female  30  nice 
4  TRUE 4 male  34 naughty 

del número de niños que creen. ¿Qué comando usaría para obtener esto?

(La trama de datos real es mucho más grande. He acabo las primeras cuatro filas ... Given)

Gracias!

Respuesta

35

Usted podría utilizar table:

R> x <- read.table(textConnection(' 
    Believe Age Gender Presents Behaviour 
1 FALSE 9 male  25 naughty 
2  TRUE 5 male  20  nice 
3  TRUE 4 female  30  nice 
4  TRUE 4 male  34 naughty' 
), header=TRUE) 

R> table(x$Believe) 

FALSE TRUE 
    1  3 
14
sum(Santa$Believe) 
+0

Creo que esta es probablemente la forma más rápida. – Juan

+0

Esta es la solución más rápida para este caso particular, sin lugar a dudas. – Arani

21

pienso en esto como un proceso de dos pasos:

  1. subconjunto de la trama de datos original de acuerdo con el filtro suministrado (Creer == FALSE); entonces

  2. obtener el número de filas de este subconjunto

Para el primer paso, el subconjunto función es una buena manera de hacer esto (sólo una alternativa al índice ordinario o soporte notación).

Para el segundo paso, me gustaría utilizar tenue o nrow

Una ventaja de usar subconjunto: usted no tiene que analizar el resultado vuelve a obtener el resultado lo que necesita, simplemente llame al nrow en él directamente.

por lo que en su caso:

v = nrow(subset(Santa, Believe==FALSE))  # 'subset' returns a data.frame 

o envuelto en una función anónima :

>> fnx = function(fac, lev){nrow(subset(Santa, fac==lev))} 

>> fnx(Believe, TRUE) 
     3 

Aparte de nrow, tenue también hará el trabajo. Esta función devuelve los dimensiones de una trama de datos (filas, cols) por lo que sólo tiene que suministrar el índice apropiado para acceder al número de filas:

v = dim(subset(Santa, Believe==FALSE))[1] 

Una respuesta a la OP publicado antes de que éste muestra la uso de una tabla de contingencia No me gusta ese enfoque para el problema general como se recita en el PO. Esta es la razón. De acuerdo, el problema general de ¿cuántas filas en este marco de datos tienen valor x en la columna C? se puede responder usando una tabla de contingencia y también usando un esquema de "filtrado" (como en mi respuesta aquí).Si desea recuentos de fila para todos los valores para una variable de factor dada (columna), entonces una tabla de contingencia (mediante la llamada a tabla y pasando en la (s) columna (s) de interés) es la solución más sensata; sin embargo, el OP solicita el recuento de un valor particular en una variable de factor, no cuenta en todos los valores. Además del impacto en el rendimiento (puede ser grande, podría ser trivial, solo depende del tamaño del marco de datos y del contexto del canal de procesamiento en el que reside esta función). Y, por supuesto, una vez que se devuelve el resultado de la llamada a la tabla, todavía tiene que analizar de ese resultado solo el conteo que desee.

Por eso, para mí, este es un problema de filtrado en lugar de una tabla cruzada.

+5

Observando 'nrow()'. :) – fbmd

+0

De hecho 'nrow' es solo una envoltura para' dim' – Juan

2

Usted puede hacer summary(santa$Believe) y obtendrá el recuento de TRUE y FALSE

0

DPLYR lo hace muy fácil.

x<-santa%>% 
    count(Believe) 

Si desea contar por un grupo; por ejemplo, cuántos hombres y mujeres creen, solo agregue un group_by:

x<-santa%>% 
    group_by(Gender)%>% 
    count(Believe) 
Cuestiones relacionadas