Loading...
 
ADUP - R

ADUP - R


utilitzar l' spread per posar dues capçaleres aniuades

posts: 3

En la següent sintaxis volia que em posés a capçaleres any i dins de cada any el mes però no surt:

tabyl(dades$SituacioAdministrativa)
dades %>%
  filter(SituacioAdministrativa == "Denegat PI a altre país UE") %>%
  group_by(dds.any, dds.mes, Nacionalitat) %>%
  count() %>%
  spread(dds.any, dds.mes, n)


Gràcies!
Montse

posts: 51

> En la següent sintaxis volia que em posés a capçaleres any i dins de cada any el mes però no surt:

>
> tabyl(dades$SituacioAdministrativa)
> dades %>%
>   filter(SituacioAdministrativa == "Denegat PI a altre país UE") %>%
>   group_by(dds.any, dds.mes, Nacionalitat) %>%
>   count() %>%
>   spread(dds.any, dds.mes, n)
>

>
> Gràcies!
> Montse

Hola Montse:

M'ho miro i et dic quelcom en breu. Com a referència, aquesta pregunta està relacionat amb els exemples del curs d'introducció a R que estem fent aquests mesos a l'Ajuntament de Barcelona,
https://gitlab.com/radup/curs-r-introduccio

I fa referència a retocs d'un chunk d'R d'un arxiu de markdown d'exemple del curs:
https://gitlab.com/radup/curs-r-introduccio/blob/master/codi/exemple.b.06.Rmd#L408

El missatge d'error exactament és:

Error: Each row of output must be identified by a unique combination of keys. Keys are shared for 5 rows: * 4, 19 * 11, 13, 23 Do you need to create unique ID with tibble::rowid_to_column()?


M'ho miro!

posts: 51

Tema molt interessant! Gràcies Montse per la pregunta, per que he après força coses buscant la resposta, que venien com a anell al dit per a la següent sessió del curs just després de Setmana Santa:

1. Tal i com suggeria el missatge d'error, el problema era que no quedava cap columna per a mostrar de forma diferent els resultats. I una solució fàcil (tot i que no soluciona el que es volia fer) era el que suggeria el missatge d'error: afegir una columna nova amb els números de fila (amb tibble::rowid_to_column() ) per tal que es pogués evitar el problema. Però tot i evitar el problema, no genera les dues capçaleres aniudades. :-/

2. La funció spread() del paquet tidyr (del Tidyverse) no sembla permetre agrupar els resultats de la taula per dos nivells de columnes (com sí que permeten molts programes de taules dinàmiques, o com és habitual en moltes taules de presentació de resultats).

3. Hi ha un altre paquet d'R que no coneixia (sembla ser força nou) que justament permet fer aquestes taules resum de forma fàcil: pivottabler (a part del rpivotTable que ja tenia previst mostrar en la propera sessió).

Amb pivottabler pots fer la taula que ens interessa amb aquest altre codi que utilitza una de les seves funcions per fer-ho fàcil: qhpvt() (de "quick htmlwidget pivot table"):

library(pacman); p_load(pivottabler)

# alternativament:
# install.packages("pivottabler"); library(pivottabler)

# arguments:  qhpvt(dataFrame, rows, columns, calculations, ...)

qhpvt(dades %>% filter(SituacioAdministrativa == "Denegat PI a altre país UE"), # dataFrame
      c("Continent", "Nacionalitat"), # rows
      c("dds.any", "dds.mes"), # columns
      "n()" # calculations
      )


Senzill, eficaç i elegant! :-)