Transposition data.frame et fusion de colonnes

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

Tomas leon
Messages : 51
Enregistré le : 09 Jan 2018, 16:12

Transposition data.frame et fusion de colonnes

Messagepar Tomas leon » 13 Jan 2019, 14:42

Bonjour à tous,
J'ai une question de manipulation de data.frame pour vous s'il vous plait.

Voici un échantillon de mes données, ils s'agit de communes, de surfaces, et de types de peuplements forestiers.

Code : Tout sélectionner

## Jeu de données
NAME <- c("Abeilhan", "Abeilhan", "Abeilhan", "Abeilhan", "Abeilhan", "Abeilhan", "Abeilhan", "Abeilhan", "Adissan", "Adissan", "Adissan", "Adissan", "Adissan")
SURF_CO <- c(784, 784, 784, 784, 784, 784, 784, 784, 446, 446, 446, 446, 446)
CODE_TFV <- c("FF1-00","FF1-00-00","FF1G01-01","FF31","FF32","FO1","FO3","LA4","FF1-00","FF1-00-00","FF1G01-01","FF31", "FO1")
SURF_TFV <- c(8.96,51.16,13.48,2.11,1.94,5.64,1.11,21.36,3.00,33.84,4.33,2.81,4.24)
data_sf <- cbind(NAME, SURF_CO, CODE_TFV, SURF_TFV)


Voici le résultat que j'aimerais avoir :

Code : Tout sélectionner

NAME2 <- c("Abeilhan", "Adissan")
SURF_CO2 <- c(784, 446)
FF1_00 <- c(8.96, 3)
FF1_00_00 <- c(51.16, 33.84)
etc <- c("...", "...")
FF32 <- c(1.94, NA)
data_sf2 <- cbind(NAME2, SURF_CO2,FF1_00, FF1_00_00, etc, FF32)


C'est à dire que j'aimerais n'avoir plus qu'un NAME par ligne, et les CODE_TFV en colonne

Et dans un second temps j'aimerais ensuite fusionner des colonnes telles que par exemple :

Code : Tout sélectionner

## Fusion colonnnes

NAME3 <- c("Abeilhan", "Adissan")
SURF_CO3 <- c(784, 446)
NEW_FF1 <- c(60.12, 36.84)
etc <- c("...", "...")
FF32 <- c(1.94, NA)
data_sf3 <- cbind(NAME2, SURF_CO2, NEW_FF1, etc, FF32)


Je pense que dplyr pourrait être très approprié pour faire ces manips.

Merci à tous !

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

Re: Transposition data.frame et fusion de colonnes

Messagepar Pierre-Yves Berrard » 13 Jan 2019, 15:18

Bonjour,

Code : Tout sélectionner

library(dplyr)
library(tidyr)
data_sf0 <- data_frame(NAME, SURF_CO, CODE_TFV, SURF_TFV)

Pour la première question :

Code : Tout sélectionner

data_sf0 %>% spread(key = CODE_TFV, value = SURF_TFV)
PY

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

Re: Transposition data.frame et fusion de colonnes

Messagepar Pierre-Yves Berrard » 13 Jan 2019, 15:36

La deuxième est basée sur le même principe avec une préparation préalable des données :

Code : Tout sélectionner

data_sf0 %>%
  mutate(TYPE = sub("([[:alnum:]]+).+", "\\1", CODE_TFV)) %>%
  group_by(NAME, SURF_CO, TYPE) %>%
  summarise(SURF_TFV = sum(SURF_TFV)) %>%
  spread(TYPE, SURF_TFV)
PY

Tomas leon
Messages : 51
Enregistré le : 09 Jan 2018, 16:12

Re: Transposition data.frame et fusion de colonnes

Messagepar Tomas leon » 15 Jan 2019, 18:10

Bonjour à tous,

Super merci pour la réponse. Le premier code fonctionne. Mais par contre je ne comprends pas bien le second code... C'est celui-ci qui va me permettre de fusionner des colonnes entre elles en sommant les valeurs de surfaces et en créant une nouvelle colonne avec un nouveau nom ?

Encore merci

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

Re: Transposition data.frame et fusion de colonnes

Messagepar Pierre-Yves Berrard » 16 Jan 2019, 10:33

Tu peux exécuter les lignes au fur et à mesure pour voir chaque étape intermédiaire, par exemple :

Code : Tout sélectionner

data_sf0 %>%
  mutate(TYPE = sub("([[:alnum:]]+).+", "\\1", CODE_TFV)) # %>%
  # group_by(NAME, SURF_CO, TYPE) %>%
  # summarise(SURF_TFV = sum(SURF_TFV)) %>%
  # spread(TYPE, SURF_TFV)
PY


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité