La frecuencia cuenta en R

Esto puede parecer una pregunta R muy básica, pero agradecería una respuesta. Tengo un dataframe en forma de:

col1 col2 ag ah ag bi bg bh ci 

Quiero transformarlo en conteos, por lo que el resultado sería así. Intenté usar la función de tabla (), pero parece que solo puedo obtener el conteo de una columna.

  abc g 2 1 0 h 1 1 0 i 0 1 1 

¿Cómo lo hago en R?

No estoy muy seguro de lo que usaste, ¡pero la table funciona bien para mí!

Aquí hay un ejemplo reproducible mínimo:

 df <- structure(list(V1 = c("a", "a", "a", "b", "b", "b", "c"), V2 = c("g", "h", "g", "i", "g", "h", "i")), .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA, -7L)) table(df) # V2 # V1 ghi # a 2 1 0 # b 1 1 1 # c 0 0 1 

Notas:

  • Pruebe la table(df[c(2, 1)]) (o table(df$V2, df$V1) ) para intercambiar las filas y columnas.
  • Use as.data.frame.matrix(table(df)) para obtener un data.frame como salida. ( as.data.frame creará un data.frame largo, no uno en el mismo formato de salida que desee).

Usando f de @Ananda puedes usar dcast

 library(reshape2) > dcast(f, V1~V2) Using V2 as value column: use value.var to override. Aggregation function missing: defaulting to length V1 ghi 1 a 2 1 0 2 b 1 1 1 3 c 0 0 1 

Sin embargo, estoy escribiendo esto solo en caso de que necesite algo más que solo la table (que para este caso es la respuesta correcta más simple) en el futuro, como:

 set.seed(1) f$var <- rnorm(7) > f V1 V2 var 1 ag -0.6264538 2 ah 0.1836433 3 ag -0.8356286 4 bi 1.5952808 5 bg 0.3295078 6 bh -0.8204684 7 ci 0.4874291 > dcast(f, V1~V2, value.var="var", fun.aggregate=sum) V1 ghi 1 a -1.4620824 0.1836433 0.0000000 2 b 0.3295078 -0.8204684 1.5952808 3 c 0.0000000 0.0000000 0.4874291 
    Intereting Posts