Agrupar por recuentos únicos a través de varias columnas.
Tengo una tabla con información sobre tiendas y frutas (manzanas y naranjas). Cada tienda tiene un inventario donde se registran estas frutas por sus ID.
– Las manzanas y las naranjas pueden ser de diferentes tipos, por ejemplo, pink lady, royal gala, apple eve, apple jazz, etc. Cuando son de diferentes tipos, se almacenan con diferentes ID.
– Pero cuando dos manzanas son del mismo tipo, tendrán el mismo ID.
Estoy interesado en contar, para cada tienda, cuántos tipos diferentes de manzanas y cuántos tipos diferentes de naranjas hay.
Mi entrada es:
Tienda Manzana_id Naranja_id
Coles 12 201
Woolies 20 51
Walmart 13 16
Woolies 20 52
Coles 14 202
Target 19 81
M&S 75 99
Coles 16 203
M&S 71 99
Dunnes 56 101
M&S 72 91
Mi salida esperada es:
Tienda Manzanas Naranjas
Coles 3 3
Dunnes 1 1
M&S 3 2
Target 1 1
Walmart 1 1
Woolies 1 2
Puedo ejecutar el código uno por uno para cada fruta utilizando el paquete dplyr():
Extraer información solo sobre las manzanas
biblioteca(dplyr)
manzanas_por_tienda = crudo %>%
group_by(tienda) %>%
distinct(id_manzana) %>%
count()
De manera similar, puedo escribir código para extraer información solo para naranjas:
Extraer información solo sobre las naranjas
naranjas_por_tienda = crudo %>%
group_by(tienda) %>%
distinct(id_naranja) %>%
count()
Mi pregunta es, ¿puedo combinar los dos anteriores en una sola línea de código, por ejemplo, a través de la función summarise()?
davy.ai
Sí, es posible fusionar las dos líneas de código anteriores en una sola línea utilizando la función
summarise()
dedplyr()
. El código se vería así:Este código agrupa los datos por tienda y calcula el número de identificadores de manzanas únicos (
Apples
) e identificadores de naranjas únicos (Oranges
) para cada tienda utilizando la funciónn_distinct()
dentro desummarise()
. La salida resultante será una tabla con tres columnas:Shop
,Apples
, yOranges
, y filas para cada tienda única.