studio - tablas cruzadas en r
recuento de entradas en el marco de datos en R (5)
Estoy buscando obtener un conteo para el siguiente marco de datos:
> 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
de la cantidad de niños que creen. ¿Qué comando usaría para obtener esto?
(El marco de datos actual es mucho más grande. Acabo de darte las primeras cuatro filas ...)
¡Gracias!
DPLYR hace esto realmente fácil.
x<-santa%>%
count(Believe)
Si quisieras contar por un grupo; por ejemplo, cuántos hombres y mujeres creen, simplemente agregue un group_by
:
x<-santa%>%
group_by(Gender)%>%
count(Believe)
Pienso en esto como un proceso de dos pasos:
subconjunto del marco de datos original según el filtro suministrado (Believe == FALSE); entonces
obtener el recuento de filas de este subconjunto
Para el primer paso, la función de subconjunto es una buena forma de hacerlo (solo una alternativa al índice ordinario o la notación de corchetes ).
Para el segundo paso, usaría dim o nrow
Una de las ventajas del uso de subconjuntos : no tiene que analizar el resultado que devuelve para obtener el resultado que necesita, simplemente llame a nrow directamente.
entonces en tu 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 , dim también hará el trabajo. Esta función devuelve las dimensiones de un marco de datos (filas, columnas) por lo que solo debe proporcionar el índice adecuado para acceder al número de filas:
v = dim(subset(Santa, Believe==FALSE))[1]
Una respuesta al PO publicado antes de esta muestra el 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 usando un esquema de "filtrado" (como en mi respuesta aquí). Si desea recuentos de filas para todos los valores para una variable de factor dada (columna), entonces una tabla de contingencia (a través de la tabla de llamadas 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 mesa, todavía tiene que analizar a partir de ese resultado el recuento que desea.
Por eso, para mí, esto es un problema de filtrado en lugar de una tabulación cruzada.
Puede hacer un summary(santa$Believe)
y obtendrá el conteo de TRUE
y FALSE
Puedes usar la 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
sum(Santa$Believe)