3 votes

R, table à 3 voies, comment commander

J'essaie de commander un tableau à trois variables, communément appelé tableau à trois entrées.

J'ai joint une image de la structure du tableau que le code reproductible produira.

3-waytable

Est-il possible d'ordonner ce tableau de manière logique, bien qu'il soit essentiellement divisé en trois sections/groupes ? Par exemple, est-il possible d'ordonner la colonne "Non" ou la colonne "Oui" en fonction des valeurs ? Par exemple, en classant par "Non", l'Angleterre serait classée comme "Sertosa" (7), Virginica (8), Versicolour (16). Le Pays de Galles serait classé Versicolor (11), Setoda (12), Virginica... et ainsi de suite pour chaque section du tableau.

Code reproductible utilisant les données Iris intégrées dans R :

Data <- iris
Data $ var2 <- Data $ Species
Data $ var2 <- sample(Data $ var2)
Data $ var3 <- Data $ Species
Data $ var3 <- sample(Data $ var3)
#making the example clearer
library(plyr)
Data $ var2 <- revalue(Data $ var2, c("setosa"="No", "versicolor"="No","virginica" ="Yes")) 
Data $ var3 <- revalue(Data $ var3, c("setosa"="England", "versicolor"="Wales","virginica" ="Scotland")) 
#3-way Table:
df <- table(Data $ Species, Data $ var2, Data $ var3)
df

Cordialement, James Prentice, une personne qui essaie de se familiariser avec R.

4voto

Brenton M. Wiernik Points 331

Vous devez éviter d'utiliser table() y array() en R, car il est difficile de travailler avec eux. Je vous recommande également de vous concentrer sur l'apprentissage de dplyr plutôt que plyr , comme plyr n'est plus maintenu.

Au lieu d'utiliser table() travaillent directement avec la base de données d'origine :

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
Data <- iris
Data$Living <- sample(c("No", "Yes"), size = nrow(Data), replace = TRUE)
Data$Country <- sample(c("England", "Wales", "Scotland"), size = nrow(Data), replace = TRUE)

# Results in one data frame
Data %>%
  group_by(Country, Species) %>%
  summarize(Yes = sum(Living == "Yes"), No = sum(Living == "No")) %>%
  ungroup() %>% 
  arrange(Country, Yes) 
#> `summarise()` has grouped output by 'Country'. You can override using the `.groups` argument.
#> # A tibble: 9 x 4
#>   Country  Species      Yes    No
#>   <chr>    <fct>      <int> <int>
#> 1 England  virginica      2     8
#> 2 England  versicolor     7    15
#> 3 England  setosa        14     5
#> 4 Scotland setosa         5    14
#> 5 Scotland virginica      6    12
#> 6 Scotland versicolor     9     8
#> 7 Wales    setosa         4     8
#> 8 Wales    versicolor     5     6
#> 9 Wales    virginica     14     8

# Results in a list of data frames 
Data %>%
  group_by(Country, Species) %>%
  summarize(Yes = sum(Living == "Yes"), No = sum(Living == "No")) %>%
  ungroup() %>% 
  arrange(Country, Yes) %>%
  split(., .$Country)
#> `summarise()` has grouped output by 'Country'. You can override using the `.groups` argument.
#> $England
#> # A tibble: 3 x 4
#>   Country Species      Yes    No
#>   <chr>   <fct>      <int> <int>
#> 1 England virginica      2     8
#> 2 England versicolor     7    15
#> 3 England setosa        14     5
#> 
#> $Scotland
#> # A tibble: 3 x 4
#>   Country  Species      Yes    No
#>   <chr>    <fct>      <int> <int>
#> 1 Scotland setosa         5    14
#> 2 Scotland virginica      6    12
#> 3 Scotland versicolor     9     8
#> 
#> $Wales
#> # A tibble: 3 x 4
#>   Country Species      Yes    No
#>   <chr>   <fct>      <int> <int>
#> 1 Wales   setosa         4     8
#> 2 Wales   versicolor     5     6
#> 3 Wales   virginica     14     8

Créé le 2021-06-01 par le paquet reprex (v2.0.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