tablas - Conteo condicional y grupo por en R
seleccionar filas en r (5)
Me gustaría contar cuántas filas hay por type
si cumplen la condición x == 0
. Algo así como un grupo por en SQL
Aquí hay un ejemplo de los datos
type x
search 0
NULL 0
public 0
search 1
home 0
home 1
search 0
Dado el marco de datos, df=data.frame(type=c(''search'',''NULL'',''public'',''search'',''home'',''home'',''search''),x=c(0,0,0,1,0,1,0))
Si desea saber cuántos de cada valor en la columna 1 tienen un valor en la columna 2 de cero, puede usar: table(df)[,1]
siempre y cuando solo estés trabajando con 1 y 0 para obtener la respuesta:
home NULL public search
1 1 1 2
Supongo que desea encontrar el número de filas cuando se cumple una condición en particular (cuando una variable tiene algún valor).
Si este es el caso, entonces supongo que tiene "x" como una variable representada en una columna. "x" puede tomar múltiples valores. Suponga que desea encontrar cuántas filas hay en sus datos cuando x es 0. Esto podría hacerse por:
nrow(subset(data, x=="0")
''datos'' es el nombre del objeto para su conjunto de datos en R
EDITAR:
Estoy viendo su marco de datos editado ahora. Puede usar esto para resolver su problema:
table(data$type, data$x)
También podría hacer esto con el paquete dplyr
:
library(dplyr)
df2 <- df %>% group_by(x,type) %>% tally()
lo que da:
x type n
1 0 home 1
2 0 NULL 1
3 0 public 1
4 0 search 2
5 1 home 1
6 1 search 1
También podría usar el paquete sqldf:
library(sqldf)
df <- data.frame(type=c(''search'',''NULL'',''public'',''search'',''home'',''home'',''search''),x=c(0,0,0,1,0,1,0))
sqldf("SELECT type, COUNT(*) FROM df WHERE x=0 GROUP BY type")
que da el siguiente resultado:
type COUNT(*)
1 NULL 1
2 home 1
3 public 1
4 search 2
Dado que sus datos están estructurados como un marco de datos, el siguiente código tiene un tiempo de ejecución mejor que las respuestas dadas anteriormente:
nrow(data[data$x=="0"])
Puedes probar tu tiempo de ejecución usando:
ptm <- proc.time()
nrow(subset(data, x == "0"))
proc.time() - ptm
ptm <- proc.time()
nrow(data[data$x=="0"]))
proc.time() - ptm
En mi caso, el tiempo de ejecución fue aproximadamente 15 veces más rápido, con 1 millón de filas.