Créer un nouveau tableau à partir d'un fichier csv importé sur R

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Nicolas Giraud
Messages : 25
Enregistré le : 21 Juin 2018, 07:00

Créer un nouveau tableau à partir d'un fichier csv importé sur R

Messagepar Nicolas Giraud » 25 Aoû 2020, 08:20

Bonjour

Je reprends en main R et c'est pas évident...

J'ai un tableau de données avec en variables/colonnes (N°Observations, Individus, Fruit, Fleur, Tige, etc)
Chaque ligne correspond à une observation d'un individus référant une plante (e.g. Vacciniummyrtillus)

Je souhaite à partir de ce tableau (1) recréer un nouveau tableau avec
a. en colonne (Nom_Plante, NR_Fruit, NR_Fleur, NR_Tige, NR_etc, NR_total) ; NR étant le nombre de rapport référant au nombre de fois où la plante est citée dans chaque catégorie (Fruit, Fleur, Tige, etc)
b. en lignes les différentes espèces de plantes

(2) et vous l'aurez compris, cela pour réaliser des comptages : nombre de fois où la plante a été citée dans une catégorie (Fruit, Fleur, Tige, etc) et faire un total

Ce que j'ai fait:
- importer mon tableau primaire depuis un fichier excel.csv comme ceci

Code : Tout sélectionner

data<-read.table(file.choose(), sep=";",dec=";", header=TRUE)


- summary (data): il me donne le nom des variables (les plantes) et le nb de fois citées; maintenant je n'arrive pas à trouver la fonction qui me permettra de construire ce tableau récapitulatif.

D'avance merci pour votre aide,
Bien à vous
Nicolas

Facundo Muñoz
Messages : 156
Enregistré le : 04 Juil 2019, 09:58
Contact :

Re: Créer un nouveau tableau à partir d'un fichier csv importé sur R

Messagepar Facundo Muñoz » 25 Aoû 2020, 08:42

Bonjour Nicolas,

Pouvez-vous poser un exemple fictif et minimal, avec quelques lignes du tableau d'entrée et du tableau souhaité ?

Cordialement,
ƒacu.-

Nicolas Giraud
Messages : 25
Enregistré le : 21 Juin 2018, 07:00

Re: Créer un nouveau tableau à partir d'un fichier csv importé sur R

Messagepar Nicolas Giraud » 25 Aoû 2020, 09:24

Oui, bien sûr.

Ci-dessous le tableau d'entrée très réduit, ainsi que celui souhaité en sortie

Code : Tout sélectionner

#Exemple de tableau d'entrée
data<-data.frame(Obs=c(1, 2, 3), Id= c("71", "71", "73"), berries=c("Vmyrtillus", "Vuliginosum", "Vmyrtillus"), flowers=c("Apodagraria", "Tofficinale", "Tofficinale"))
data

#Exemple de tableau de sortie souhaité
report<-data.frame(Species=c("Vmyrtillus", "Vuliginosum", "Apodagraria", "Tofficinale"), Berries=c(2,1,0,0), Flowers=c(0,0,1,2), Total=c(2,1,1,2))
report


En espérant que cela est plus clair, merci pour votre aide
Nicolas

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Créer un nouveau tableau à partir d'un fichier csv importé sur R

Messagepar Pierre-Yves Berrard » 25 Aoû 2020, 09:45

Bonjour,

Une façon de faire consiste à changer la forme des données avant de réaliser le comptage :

Code : Tout sélectionner

library(tidyr)

data_long <-
  pivot_longer(
    data,
    cols = -(1:2),
    names_to = "Category",
    values_to = "Species"
  )

table(data_long$Species, data_long$Category
PY

Facundo Muñoz
Messages : 156
Enregistré le : 04 Juil 2019, 09:58
Contact :

Re: Créer un nouveau tableau à partir d'un fichier csv importé sur R

Messagepar Facundo Muñoz » 25 Aoû 2020, 09:57

Bonjour,

voici une solution :

Code : Tout sélectionner

library(tidyr)
library(dplyr)
data %>%
  ## Organise les données en format "longue"
  pivot_longer(
    cols = -(Obs:Id),
    names_to = "category",
    values_to = "species"
  ) %>%
  ## Compte le numéro d'observations par catégorie et espèce
  count(category, species) %>%
  ## Re-oranise les catégories en colonnes
  pivot_wider(
    names_from = category,
    values_from = n,
    values_fill = 0
  ) %>%
  ## Calcule la somme de toutes les colonnes sauf species
  mutate(
    total = berries + flowers
  )
 


Cordialement,
ƒacu.-

Nicolas Giraud
Messages : 25
Enregistré le : 21 Juin 2018, 07:00

Re: Créer un nouveau tableau à partir d'un fichier csv importé sur R

Messagepar Nicolas Giraud » 25 Aoû 2020, 10:52

Je vous remercie pour vos réponses.

Malheureusement, je rencontre le problème suivant... en essayant d'installer le package
Je me demande si ma version de R est à jour.

> install.packages("tidyr")
Installing package into ‘C:/Users/Utilisateur/Documents/R/win-library/3.5’
(as ‘lib’ is unspecified)
also installing the dependencies ‘rlang’, ‘tidyselect’, ‘vctrs’


There are binary versions available but the source versions are later:
binary source needs_compilation
rlang 0.4.5 0.4.7 TRUE
tidyselect 1.0.0 1.1.0 FALSE
vctrs 0.2.4 0.3.2 TRUE
tidyr 1.0.2 1.1.1 TRUE

Binaries will be installed
trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.5/rlang_0.4.5.zip'
Content type 'application/zip' length 1115838 bytes (1.1 MB)
downloaded 1.1 MB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.5/vctrs_0.2.4.zip'
Content type 'application/zip' length 1018801 bytes (994 KB)
downloaded 994 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.5/tidyr_1.0.2.zip'
Content type 'application/zip' length 1297802 bytes (1.2 MB)
downloaded 1.2 MB

package ‘rlang’ successfully unpacked and MD5 sums checked
Warning in install.packages :
cannot remove prior installation of package ‘rlang’
package ‘vctrs’ successfully unpacked and MD5 sums checked
Warning in install.packages :
cannot remove prior installation of package ‘vctrs’
package ‘tidyr’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
C:\Users\Utilisateur\AppData\Local\Temp\Rtmpox2uNl\downloaded_packages
installing the source package ‘tidyselect’

trying URL 'https://cran.rstudio.com/src/contrib/tidyselect_1.1.0.tar.gz'
Content type 'application/x-gzip' length 90842 bytes (88 KB)
downloaded 88 KB

ERROR: dependencies 'rlang', 'vctrs' are not available for package 'tidyselect'
* removing 'C:/Users/Utilisateur/Documents/R/win-library/3.5/tidyselect'
In R CMD INSTALL
Warning in install.packages :
installation of package ‘tidyselect’ had non-zero exit status

The downloaded source packages are in
‘C:\Users\Utilisateur\AppData\Local\Temp\Rtmpox2uNl\downloaded_packages’
> library("tidyr", lib.loc="~/R/win-library/3.5")
Error: package or namespace load failed for ‘tidyr’ in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]):
aucun package nommé ‘rlang’ n'est trouvé
In addition: Warning message:
le package ‘tidyr’ a été compilé avec la version R 3.5.3
> install.packages("tidyr", dependencies = FALSE)
Installing package into ‘C:/Users/Utilisateur/Documents/R/win-library/3.5’
(as ‘lib’ is unspecified)

There is a binary version available but the source version is later:
binary source needs_compilation
tidyr 1.0.2 1.1.1 TRUE

Binaries will be installed
trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.5/tidyr_1.0.2.zip'
Content type 'application/zip' length 1297802 bytes (1.2 MB)
downloaded 1.2 MB

package ‘tidyr’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
C:\Users\Utilisateur\AppData\Local\Temp\Rtmpox2uNl\downloaded_packages

> library(tidyr)
Error: package or namespace load failed for ‘tidyr’ in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]):
aucun package nommé ‘rlang’ n'est trouvé
In addition: Warning message:
le package ‘tidyr’ a été compilé avec la version R 3.5.3
library(tidyr)
Error: package or namespace load failed for ‘tidyr’ in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]):
aucun package nommé ‘rlang’ n'est trouvé
In addition: Warning message:
le package ‘tidyr’ a été compilé avec la version R 3.5.3
> library(readr)
Error: package or namespace load failed for ‘readr’ in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]):
aucun package nommé ‘rlang’ n'est trouvé
In addition: Warning message:
le package ‘readr’ a été compilé avec la version R 3.5.3
> library(dplyr)
Error: package or namespace load failed for ‘dplyr’ in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]):
aucun package nommé ‘rlang’ n'est trouvé
In addition: Warning message:
le package ‘dplyr’ a été compilé avec la version R 3.5.3

Facundo Muñoz
Messages : 156
Enregistré le : 04 Juil 2019, 09:58
Contact :

Re: Créer un nouveau tableau à partir d'un fichier csv importé sur R

Messagepar Facundo Muñoz » 25 Aoû 2020, 11:01

Votre version de R n'est pas à jour, mais ça devrait aller quand même.
Il y a eu un problème lors de l'installation des packages vctrs et rlang (pas pu éliminer les installations préalables). Peut-être parce-que les packages étaient en utilisation. Windows est un peu sensible avec cela.

Essayez de le faire dans une session nouvelle de R (sans charger des librairies). Vous pouvez commencer par supprimer ces packages vous même

Code : Tout sélectionner

remove.packages(c("rlang", "vctrs"))
et ensuite ré-essayer l'installation.

Cordialement,
ƒacu.-

Nicolas Giraud
Messages : 25
Enregistré le : 21 Juin 2018, 07:00

Re: Créer un nouveau tableau à partir d'un fichier csv importé sur R

Messagepar Nicolas Giraud » 25 Aoû 2020, 12:10

Merci.

J'ai finalement désinstallé puis réinstallé R et Rstudio, ainsi que les packages.
Cela fonctionne maintenant! J'obtiens bien en ligne les espèces, en variables le nb de fois où elles sont citées en fonction des parties de plantes (fruit, fleur, etc).

Mais la sortie n'est pas un tableau, est-ce normal? Le résultat apparaît dans 'Values' et non dans 'Data' dans l'environnement de travail...
J'ai essayé ceci pour tenter de créer un tableau et pouvoir l'exporter sur excel afin de réaliser un total de citations par plantes (Species), sans succès:

Code : Tout sélectionner

table.Sp.NR<-data.frame(Species=c(2:352), Fruits=c(2:352))
table.Sp.NR


Il me liste des suites de nombres, sûrement car j'ai créé un vecteur c(2:352) alors que je souhaitais sélectionner les lignes 2 à 352 sur R. Je ne trouve pas la bonne écriture à adopter pour ce faire.

Par ailleurs s'il est possible d'effectuer un total sur R avant d'exporter sur excel je suis preneur, même si cela sera très simple sur excel.

Merci encore,
Bien cordialement
Nicolas

Facundo Muñoz
Messages : 156
Enregistré le : 04 Juil 2019, 09:58
Contact :

Re: Créer un nouveau tableau à partir d'un fichier csv importé sur R

Messagepar Facundo Muñoz » 25 Aoû 2020, 12:26

Mais si, c'est un tableau avec la colonne de total :

Code : Tout sélectionner

``` r

#Exemple de tableau d'entrée
(data <-
    data.frame(
      Obs = c(1, 2, 3),
      Id = c("71", "71", "73"),
      berries = c("Vmyrtillus", "Vuliginosum", "Vmyrtillus"),
      flowers = c("Apodagraria", "Tofficinale", "Tofficinale")
    )
)
#>   Obs Id     berries     flowers
#> 1   1 71  Vmyrtillus Apodagraria
#> 2   2 71 Vuliginosum Tofficinale
#> 3   3 73  Vmyrtillus Tofficinale

#Exemple de tableau de sortie souhaité
(report <-
  data.frame(
    Species = c("Vmyrtillus", "Vuliginosum", "Apodagraria", "Tofficinale"),
    Berries = c(2, 1, 0, 0),
    Flowers = c(0, 0, 1, 2),
    Total = c(2, 1, 1, 2)
  )
)
#>       Species Berries Flowers Total
#> 1  Vmyrtillus       2       0     2
#> 2 Vuliginosum       1       0     1
#> 3 Apodagraria       0       1     1
#> 4 Tofficinale       0       2     2


library(tidyr)
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 %>%
  ## Organise les données en format "longue"
  pivot_longer(
    cols = -(Obs:Id),
    names_to = "category",
    values_to = "species"
  ) %>%
  ## Compte le numéro d'observations par catégorie et espèce
  count(category, species) %>%
  ## Re-oranise les catégories en colonnes
  pivot_wider(
    names_from = category,
    values_from = n,
    values_fill = 0
  ) %>%
  ## Calcule la somme de toutes les colonnes sauf species
  mutate(
    total = berries + flowers
  )
#> # A tibble: 4 x 4
#>   species     berries flowers total
#>   <chr>         <int>   <int> <int>
#> 1 Vmyrtillus        2       0     2
#> 2 Vuliginosum       1       0     1
#> 3 Apodagraria       0       1     1
#> 4 Tofficinale       0       2     2
```


Si ça ne marche pas pour vous, vous pouvez poster votre code pour qu'on puisse vous aider.

Cordialement,
ƒacu.-

Nicolas Giraud
Messages : 25
Enregistré le : 21 Juin 2018, 07:00

Re: Créer un nouveau tableau à partir d'un fichier csv importé sur R

Messagepar Nicolas Giraud » 25 Aoû 2020, 12:50

Le code

Code : Tout sélectionner

library(tidyr)
library(dplyr)
data<-read.table(file.choose(), sep=";",dec=";", header=TRUE)
data %>%

  ## Organise les données en format "longue"
  pivot_longer(
    cols = -(Obs:Id),
    names_to = "category",
    values_to = "species"
  ) %>%
  ## Compte le numéro d'observations par catégorie et espèce
  count(category, species) %>%
  ## Re-organise les catégories en colonnes
  pivot_wider(
    names_from = category,
    values_from = n,
    values_fill = 0
  ) %>%
  ## Calcule la somme de toutes les colonnes sauf species
  mutate(
    total = Berries + Flowers + Roots + Leaves + Stems + Seeds + Whole + Hips + Shoots + Buds + Algae.Seaweed + Nuts + Bark + Sap +Cones
  )
  # A tibble: 352 x 17
   species Algae.Seaweed  Bark Berries  Buds Cones
   <chr>           <int> <int>   <int> <int> <int>
 1 ""               1668  1686     466  1682  1686
 2 "Alari~             2     0       0     0     0
 3 "Ascop~             2     0       0     0     0
 4 "Fucus~             1     0       0     0     0
 5 "Himan~             2     0       0     0     0
 6 "Lamin~             3     0       0     0     0
 7 "Lamin~             1     0       0     0     0
 8 "Palma~             2     0       0     0     0
 9 "Porph~             2     0       0     0     0
10 "Sacch~             4     0       0     0     0
# ... with 342 more rows, and 11 more variables:
#   Flowers <int>, Hips <int>, Leaves <int>,
#   Nuts <int>, Roots <int>, Sap <int>, Seeds <int>,
#   Shoots <int>, Stems <int>, Whole <int>, total <int>


Cela me semble être bon au niveau des calculs, mais je n'ai rien en sortie qui apparaîtrait dans l'environnement et qui me permettrait d'exporter ce tableau vers un fichier excel...

Bien cordialement,
N

Nicolas Giraud
Messages : 25
Enregistré le : 21 Juin 2018, 07:00

Re: Créer un nouveau tableau à partir d'un fichier csv importé sur R

Messagepar Nicolas Giraud » 25 Aoû 2020, 12:52

Autant pour moi, j'ai oublié de nommer le nouvel objet

Code : Tout sélectionner

table<-data


cela semble fonctionner

Merci beaucoup.

Bien à vous
Nicolas

Facundo Muñoz
Messages : 156
Enregistré le : 04 Juil 2019, 09:58
Contact :

Re: Créer un nouveau tableau à partir d'un fichier csv importé sur R

Messagepar Facundo Muñoz » 25 Aoû 2020, 13:58

Oui, c'est ça.

Si vous voulez éviter de expliciter les 16 colonnes à additionner (c'est long, et difficile à entretenir si jamais le jeux de données change), vous pouvez substituer le calcul par :

Code : Tout sélectionner

total = purrr::pmap(select(., -species), sum) %>% unlist


Ce qui va prendre toutes les colonnes sauf species.

Cordialement,
ƒacu.-


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité