1. Grâce à ce formulaire vous pouvez proposer une astuce ou un script sur R.
  2. Votre script doit pouvoir être lancé en l'état. Veuillez penser à :
    • inclure le chargement des "library" nécessaires
    • construire un petit jeu de données si besoin est.
    • commenter les lignes de codes pour en faciliter la compréhension.
  3. Le titre de votre script ou astuce doit être clair et explicite.
  4. Pensez à mettre votre code entre les balises [R] et [/R]; Pour cela, vous pouvez utiliser le bouton

Vous pouvez utiliser vos comptes Facebook, twitter ou google pour vous identifer (google est compatible yahoo, openID...)
L'ideal étant de vous connecter si vous avez un compte utilisateur, ou faire une demande de compte utilisateur si vous n'en avez pas encore.
Créer un compte va vous permettre de pouvoir éditer vos codes et de mettre en avant votre site internet.
Sinon vous pouvez soumettre anonymement en remplissant les champs ci-après.







Choisissez les catégories correspondantes à votre Code:

  • algorithmique
  • Analyse de survie
  • base indispensable
  • bayésien
  • configuration de R
  • exportation de données
  • fonctions utiles
  • graphique
  • importation de données
  • inférence
  • manipulation de données
  • message d'erreur
  • modélisation
  • Non classé
  • optimisation
  • planification
  • programmer avec R
  • regression linéaire
  • sig - cartographie
  • Test
  • tidyverse
  • Transformation de données


Transformation de données

Comment lire le contenu d’un shapefile avec R ?

0
dans sig - cartographie, Transformation de données
- ça ne sert à rien -- c\'est interessant - (pas encore de vote)
Loading...
Un shapefile est un fichier d’information géographique avec un format vectoriel. Il permet de représenter des points (e.g. villes), des lignes (e.g. routes) et des polygones (e.g. départements) avec un système d’information géographique. Le format shapefile est composé de plusieurs fichiers séparés (4 minimum):
  • data.shp : informations de géométrie (coordonnées)
  • data.prj : information de système de projection
  • data.dbf : table des attributs
  • data.shx : indice de position des géométries
Dans R, deux packages majeurs sont utilisés pour manipuler les données géographiques de type vectoriel:
  • {sp} : Le package de référence. Il utilise notamment la librairie {rgdal} pour lire les données géographiques, un package utilisant la librairie gdal (http://www.gdal.org/).
  • {sf} : Sorti sur CRAN en 2017, il permet de travailler avec les objets vectoriels avec toutes les fonctions du {tidyverse}. Il utilise gdal de manière native.

Lire le contenu d’un shapefile avec la librairie {sp}

Le shapefile sera lu directement avec la librairie {rgdal}. Il pourra ensuite être utilisé avec les différentes fonctions du package {sp}. Un shapefile contient toujours plusieurs fichiers ayant tous le même nom mais une extension différente. Pour le lire avec la fonction rgdal de la librarie {sp} , il faut donner le dossier (dsn) dans lequel il est sauvé et le nom de la couche (layer) sans extension.
library(rgdal)
library(sp)
shp <- readOGR(dsn = 'chemin/vers/dossier', 
        layer = 'NomDeCoucheSansExtension')
Vous pourrez ensuite récupérer les informations suivantes:
  • projection
proj4string(shp)
  • coordonnées des objets (pertinent pour les fichiers de points)
coordinates(shp)
  • Les données de la table attributaire sans l’information géographique
shp@data
# ou
data.frame(shp)

Lire le contenu d’un shapefile avec la librairie {sf}

Comme pour {rgdal}, la lecture du shapefile se fait en spécifiant le dossier (dsn) et le nom de la couche (layer) sans extension.
library(sf)
shp <- st_read(dsn = 'chemin/vers/dossier', 
        layer = 'NomDeCoucheSansExtension')
Vous pourrez ensuite récupérer les informations suivantes:
  • projection
st_crs(shp)
  • coordonnées des objets. Les coordonnées des lignes et des polygones sont fournies avec les identifiants des lignes / sous-lignes ou polygones / sous-polygones auxquels ils appartiennent.
st_coordinates(shp)
  • Les données de la table attributaire sans l’information géographique. Les opérations classiques sur les tables de données peuvent être réalisées directement l’objet shp>/code>.
data.frame(shp)

Proposé par sebastien.

Pas encore de commentaire, cliquez ici pour réagir.

Comment joindre plusieurs colonnes en une ? unite()

0
dans tidyverse, Transformation de données
- ça ne sert à rien -- c\'est interessant - (pas encore de vote)
Loading...

Si vous souhaitez unifier plusieurs colonnes en une seule, faites appel à la fonction unite(), issue du package tidyr.

Cette fonction prends en premier argument le nom de l’objet contenant le tableau, la colonne cible, les colonnes à lier, puis un éventuel séparateur. Notez que le séparateur de base est « _ ».

data("msleep")
library(tidyr)
unite(msleep, genusvore, genus, vore, sep = "-")
Pas encore de commentaire, cliquez ici pour réagir.

Comment créer une nouvelle colonne dans un data.frame ? mutate()

0
dans tidyverse, Transformation de données
- ça ne sert à rien -- c\'est interessant - (score de +1 sur 1 votes)
Loading...
Pour ajouter une colonne, direction la fonction mutate. Avec celle-ci, vous pouvez insérer un objet externe au tableau (par exemple une liste), ou le résultat de l’opération sur une ou plusieurs colonnes.
data("faithfuld")
library(dplyr)
mutate(faithful, index= 1:nrow(faithful), er.wa = eruptions / waiting)
Pas encore de commentaire, cliquez ici pour réagir.

Comment convertir un nombre de secondes en une période et une période en nombre de secondes ? seconds_to_period, period_to_seconds

0
dans fonctions utiles, Transformation de données
- ça ne sert à rien -- c\'est interessant - (score de +1 sur 1 votes)
Loading...

La fonction seconds_to_period(), du package lubridate, permet de convertir un nombre de secondes en une période, et la fonction period_to_seconds() permet de convertir une période en un nombre de secondes.

 
seconds_to_period(60)
[1] "1M 0S"
seconds_to_period(150)
[1] "2M 30S"
seconds_to_period(3600)
[1] "1H 0M 0S"
seconds_to_period(4989000)
[1] "57d 17H 50M 0S"
 
 
period_to_seconds(seconds_to_period(60))
[1] 60
period_to_seconds(seconds_to_period(150))
[1] 150
period_to_seconds(seconds_to_period(3600))
[1] 3600
period_to_seconds(seconds_to_period(4989000))
[1] 4989000
 
 

Proposé par Helene F.

Pas encore de commentaire, cliquez ici pour réagir.

Comment modifier les composantes d’une date ? DateUpdate

0
dans fonctions utiles, Transformation de données
- ça ne sert à rien -- c\'est interessant - (pas encore de vote)
Loading...

La fonction DateUpdate(), du package lubridate, permet de modifier les composantes d’une date : l’année, le mois… ou encore les secondes. Cette fonction renvoie la date modifiée.

 
library(lubridate)
 
#On crée un date 
date <- as.POSIXct("2009-02-10")
date
[1] "2009-02-10 CET"
 
update(date, year = 2010, month = 1, days = 1)
[1] "2010-01-01 CET"
 
update(date, minute = 10, second = 3)
[1] "2009-02-10 00:10:03 CET"
 
   

Proposé par Helene F.

Pas encore de commentaire, cliquez ici pour réagir.

Comment arrondir une date en fonction de différentes unités ? ceilling_date, floor_date, round_date

0
dans fonctions utiles, Transformation de données
- ça ne sert à rien -- c\'est interessant - (score de +2 sur 2 votes)
Loading...

La fonction ceilling_date(), du package lubridate, permet d’arrondir une donnée de type « date » à la date la plus grande en fonction de différentes unités :

 
library(lubridate)
 
x <- as.POSIXct("2009-08-03 12:01:57.23")
 
ceiling_date(x, "second")
[1] "2009-08-03 12:01:58 CEST"
#On arrondit à la seconde la plus grande
 
ceiling_date(x, "minute")
[1] "2009-08-03 12:02:00 CEST"
#On arrondit à la minute la plus grande
 
ceiling_date(x, "hour")
[1] "2009-08-03 13:00:00 CEST"
#On arrondit à l'heure la plus grande
 
ceiling_date(x, "day")
[1] "2009-08-04 CEST"
#On arrondit au jour le plus grand
 
ceiling_date(x, "week")
[1] "2009-08-09 CEST"
 
ceiling_date(x, "month")
[1] "2009-09-01 CEST"
 
ceiling_date(x, "year")
[1] "2010-01-01 CEST"
 
 

De même, la fonction floor_date(), permet d’arrondir une date à la date la plus petite, et la fonction round_date(), permet d’arrondir une date à la date la plus proche en fonction de différentes unités.

 
library(lubridate)
 
x1 <- as.POSIXct("2009-08-03 12:01:57.23")
x2 <- as.POSIXct("2009-08-03 12:42:57.23")
 
floor_date(x1, "hour")
[1] "2009-08-03 12:00:00 CEST"
#On arrondit à l'heure la plus petite
 
round_date(x1, "hour")
[1] "2009-08-03 12:00:00 CEST"
round_date(x2, "hour")
[1] "2009-08-03 13:00:00 CEST"
 #On arrondit à l'heure la plus proche 
 
   

Proposé par Helene F.

Pas encore de commentaire, cliquez ici pour réagir.

Comment fusionner les différentes parties d’un array dans un data.frame ? : melt

0
dans Transformation de données
- ça ne sert à rien -- c\'est interessant - (score de +2 sur 2 votes)
Loading...

La fonction melt(), qui fait partie du package reshape2, permet de regrouper les différentes parties d’un array dans un data.frame.

 
library(reshape)
 
a <- array(c(1:11, NA), c(2,2,3),dimnames=list(NULL, NULL, c("A","B","C")))
a
, , A
 
     [,1] [,2]
[1,]    1    3
[2,]    2    4
 
, , B
 
     [,1] [,2]
[1,]    5    7
[2,]    6    8
 
, , C
 
     [,1] [,2]
[1,]    9   11
[2,]   10   NA
 
 
melt(a, na.rm = TRUE) #On fusionne A, B et C
#na.rm permet d'enlever les "NA" du jeu de données
 
melt(a,na.rm = TRUE, varnames=c("abscisses","ordonnées","variables"))
#On fait la même chose mais cette fois en attribuant aux colonnes les noms que l'on désire
 
   

On obtient :

 
melt(a,na.rm = TRUE, varnames=c("abscisses","ordonnées","variables"))
   abscisses ordonnées variables value
1          1         1         A     1
2          2         1         A     2
3          1         2         A     3
4          2         2         A     4
5          1         1         B     5
6          2         1         B     6
7          1         2         B     7
8          2         2         B     8
9          1         1         C     9
10         2         1         C    10
11         1         2         C    11
 
   

Proposé par Helene F.

Pas encore de commentaire, cliquez ici pour réagir.

Comment attribuer ou modifier le nom des différentes parties d’un objet de type array ?

0
dans fonctions utiles, Transformation de données
- ça ne sert à rien -- c\'est interessant - (pas encore de vote)
Loading...

 
b <- array(c(1:11, NA), c(2,2,3))         
#On crée un objet de type « array »
 
dimnames(b)<-list(NULL, NULL, c("Temp","Haut","Long"))
#On attribue un nom aux trois sections de l’array :  "Temp","Haut" et "Long"
 
 

On obtient :

 
> b
, , Temp
 
     [,1] [,2]
[1,]    1    3
[2,]    2    4
 
, , Haut
 
     [,1] [,2]
[1,]    5    7
[2,]    6    8
 
, , Long
 
     [,1] [,2]
[1,]    9   11
[2,]   10   NA
 

Proposé par Helene F.

Pas encore de commentaire, cliquez ici pour réagir.

Comment convertir un vecteur de caractères en vecteur numérique ? : type.convert

0
dans fonctions utiles, Transformation de données
- ça ne sert à rien -- c\'est interessant - (score de -3 sur 3 votes)
Loading...

La fonction type.convert(), qui fait partie du package reshape2, permet de convertir un vecteur de caractères en vecteur numérique.

 

 
Library(reshape2)
 
x <- c("14","11","2") #On crée un vecteur
class(x)
[1] "character"
 
x <- type.convert(x, dec=".")
class(x)
[1] "integer"
x
[1] 14 11  2
 
 

Proposé par Helene F.

Pas encore de commentaire, cliquez ici pour réagir.

Comment séparer les éléments d’un vecteur en plusieurs colonnes ? : colsplit

0
dans fonctions utiles, manipulation de données, Transformation de données
- ça ne sert à rien -- c\'est interessant - (score de +3 sur 3 votes)
Loading...

La fonction colsplit(), qui fait partie du package reshape2, permet de séparer des éléments d’un vecteur en plusieurs colonnes et de retourner un data.frame. Cela peut être utile lorsqu’on a une combinaison de deux variables associées et séparées par un espace, un « – » ou encore un « _ ».

 
Library(reshape2)
 
x <- c("Jan-2001", "Fev-2001", "Mar-2002", "Dec-2005")
vars <- colsplit(x, "-", c("Mois", "Annee"))
#On sépare les deux variables "Mois" et "Année" contenues dans x et séparées par un "-" 
vars
  Mois Annee
1  Jan  2001
2  Fev  2001
3  Mar  2002
4  Dec  2005
 
str(vars)
'data.frame':   4 obs. of  2 variables:
 $ Mois : chr  "Jan" "Fev" "Mar" "Dec"
 $ Annee: int  2001 2001 2002 2005
 
 

On obtient donc un data.frame composé d’une colonne de caractères et une colonne d’entiers. Il est possible d’utiliser la fonction type.convert() pour convertir un vecteur de caractères en vecteur numérique.

 

 

Proposé par Helene F.

Pas encore de commentaire, cliquez ici pour réagir.
Formation logiciel R