> Divers > Analyse des images : biOps > Manipulation de données
Manipulation de données
colsplit : permet de splitter un vecteur selon un sépateur pour en faire un dataframe (inverse de paste) :
v <- c("A-a-1", "B-b-2", "C-c-3")
colsplit(v, split = "-", names = c("upper", "lower", "digits"))
donne :
upper lower digits
1 A a 1
2 B b 2
3 C c 3
melt : permet de réarranger un dataframe pour empiler les lignes partageant certaines valeurs des variables identifiant, en indiquant le nom et la valeur de la variable mesurée :
- exemple simple :
fr <- data.frame(digit = c(1, 2, 3, 4, 5),
upper = c("A", "B", "C", "A", "C"),
lower = c("a", "b", "c", "a", NA))
melt(fr, id.vars = c("digit"))
donne une ligne par ligne initiale et colonne non présente dans id.vars :
digit variable value
1 1 upper A
2 2 upper B
3 3 upper C
4 4 upper A
5 5 upper C
6 1 lower a
7 2 lower b
8 3 lower c
9 4 lower a
10 5 lower <NA>
- melt(fr, id.vars = c("digit"), na.rm = TRUE) : enlève les lignes où la variable a une valeur NA
- melt(fr, measure.vars = c("lower", "upper")) : permet de préciser les colonnes à utiliser comme variables, plutôt que de prendre celles non présentes dans id.vars
- on peut aussi utiliser les deux, les colonnes présentes ni dans l'une ni dans l'autre seront oubliées : melt(fr, id.vars = c("digit"), measure.vars = c("lower", "upper"))
- melt(fr, id.vars = c("digit"), variable_name = "myVar") : permet de renommer la colonne qui contient le nom de la variable
cast : permet de faire l'inverse de melt :
- avec l'exemple ci-dessus : frm <- melt(fr, id.vars = c("digit")), cast(frm , digit ~ variable) redonne le frame de départ.
- chaque variable du membre de gauche de la formule finit comme colonne (il peut y en avoir plusieurs, var1 + var2), chaque valeur du membre de droite finit comme colonne.
- si il y a plusieurs valeurs dans une cellule, il faut fournir alors une fonction d'aggrégation qui prend le vecteur de valeurs et renvoie la valeur à indiquer. Par exemple :
frm2 <- data.frame(digit = c(1, 2, 1, 2, 1),
variable = c("upper", "upper", "lower", "lower", "upper"),
value = c("A", "B", "a", "b", "C"))
cast(frm2, digit ~ variable, function(x) return(paste(x, collapse = ",")))
donne :
digit lower upper
1 1 a A,C
2 2 b B
expand.grid.fr : permet de faire toutes les combinaisons de lignes de 2 frames :
expand.grid.df(data.frame(x = c("a", "b", "c")), data.frame(y = c("A", "B", "C")))
donne
x y
1 a A
2 b A
3 c A
4 a B
5 b B
6 c B
7 a C
8 b C
9 c C
rescaler : permet de rescaler une variable selon différentes stratégies :
- v <- c(0, 3, 2, 6, 4, 50, 7); rescaler(v, type = "sd") : rescaler pour avoir une z-value : (x - mean(x)) / sd(x)
- type = "range" : entre 0 et 1
- type = "rank" : le numéro d'ordre de la valeur
- type = "robust" : comme sd, mais utilise la médiane et la median absolute deviation
untable : repète les lignes d'un dataframe autant de fois qu'indiqué :
untable(fr, c(1, 4, 2, 2, 2))
le vecteur doit indiquer pour chaque ligne combien de fois la répéter (1 fois pour la première, 4 fois pour la seconde, etc ...)
Copyright Aymeric Duclert
programmer en R, tutoriel R, graphes en R