2 votes

Utilisation de R expss et de la logique dplyr

Je essaie de faire en sorte que expss utilise des étiquettes avec la logique dplyr - voir l'exemple ci-dessous.

La vignette indique ce qui suit sous use_labels. Par maintenant, le support des étiquettes de variable est disponible uniquement pour les expressions qui seront évaluées à l'intérieur d'un data.frame. Est-ce le problème que j'ai ici?

#

##########################################
library(expss)
library(tidyverse)
data(mtcars)
mtcars = apply_labels(mtcars,
                      mpg = "Miles/(US) gallon",
                      cyl = "Number of cylinders",
                      disp = "Displacement (cu.in.)",
                      hp = "Gross horsepower",
                      drat = "Rear axle ratio",
                      wt = "Weight (1000 lbs)",
                      qsec = "1/4 mile time",
                      vs = "Engine",
                      vs = c("Moteur V" = 0,
                             "Moteur droit" = 1),
                      am = "Transmission",
                      am = c("Automatique" = 0,
                             "Manuel"=1),
                      gear = "Nombre de vitesses avant",
                      carb = "Nombre de carburateurs"
)

# table with caption from label - labels working
cro_cpct(mtcars$am, mtcars$vs) %>% set_caption(var_lab(mtcars$am))

## Ceci fonctionne comme prévu - maintenant pour obtenir cela avec expss use_labels.
mtcars %>%
 group_by(am) %>%
  summarise(
   freq = n()
)
#######
#am             freq
#    
# 1 0             19
# 2 1             13
########################

#### Ceci ne fonctionne pas - c'est-à-dire non étiqueté
use_labels(mtcars %>%
  group_by(am) %>%
   summarise(
    freq = n()
))
## Erreur dans substitute_symbols(expr, c(substitution_list, list(..data = quote(expss::vars(other))))) : 
  # l'argument "expr" manque, sans valeur par défaut

Si les étiquettes ne peuvent pas être utilisées avec la logique dplyr, quelqu'un connaît-il un autre package qui peut utiliser des étiquettes avec dplyr? Cordialement

2voto

Ronak Shah Points 24715

Vous pourriez utiliser le paramètre ...data pour accéder aux données dans l'expression et values2labels (Merci à @Gregory Demin) pour obtenir les libellés.

library(expss)  
use_labels(mtcars, ..data %>% 
                      group_by(am) %>% 
                      summarise(freq = n()) %>% values2labels)
# A tibble: 2 x 2
#  Transmission  freq
#     
#1 Automatique    19
#2 Manuel         13

0voto

Jargp Points 1

Le package foreign conserve les libellés de valeur. Haven ne le fait pas, du moins pas par défaut et je ne peux pas trouver comment le faire. Vous pouvez le confirmer en inspectant str() des données importées. Si vous ne voyez pas les libellés quelque part, ils n'ont pas été importés. Ici, j'importe un jeu de données Stata avec des libellés de valeur pour l'union et le sexe, qui sont tous deux sous-jacents à 0/1. La commande cro_cpct utilise les libellés de valeur, mais pas les libellés de variable, lorsqu'ils sont importés avec le package foreign (read.dta). Lorsqu'ils sont importés avec le package haven (read_dta), cro_cpct utilise les libellés de variable mais pas les libellés de valeur.

    library(expss)
    library(tidyverse)
    library(foreign)
    wages <- read.dta("c:/users/pjargowsky/documents/course/qm2/wages.dta")
    cro_cpct(wages$female, wages$union) %>% set_caption(var_lab(wages$female))

#
# |              |              | wages$union |      |
# |              |              |          no |  yes |
# | ------------ | ------------ | ----------- | ---- |
# | wages$female |         male |        50.5 | 70.8 |
# |              |       female |        49.5 | 29.2 |
# |              | #Total cases |       438.0 | 96.0 |

library(haven)
wages <- read_dta("c:/users/pjargowsky/documents/course/qm2/wages.dta")
cro_cpct(wages$female, wages$union) %>% set_caption(var_lab(wages$female))

# Gender                                                    
# |        |              | Union Membership |      |
# |        |              |                0 |    1 |
# | ------ | ------------ | ---------------- | ---- |
# | Gender |            0 |             50.5 | 70.8 |
# |        |            1 |             49.5 | 29.2 |
# |        | #Total cases |            438.0 | 96.0 |

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X