Dataframe
Créer un dataframe
data.frame(col1 = vect1, col2 = vect2)
créer un dataframe.-
Créer un dataframe vide :
data.frame(matrix(ncol = length(col_names), nrow = 0))
data.frame(col1 = type, col2 = type)
-
as.data.frame(lapply(donnees, type.convert))
réidentifier le type de variables d'un dataframe. expand.grid(col1 = vec1, col2 = vec2)
renvoie un dataframe avec la combinaison des vecteurs.
Transformer une liste en dataframe :
data.frame(
niveau = rep(seq(length(liste)), lengths(liste)),
debut = matrix(unlist(liste))
)
transpose(df)
tranformer un dt en liste de lignes (library(purrr)
).
Renommer les colonnes
setNames(c('pos_row','pos_col'))
ajouter un nom de colonnes.rename(new_nom = old_nom)
ouc(new_nom = old_nom)
renommer une colonne.rename_with(~paste(., "0"), .cols = everything())
renommer les colonnes (.cols
préciser les colonnes à renommer).rename(!!!setNames(col_units$old_name, col_units$new_name))
renommer les colonnes à partir d'un dataframe.dplyr::rename_with(~ unlist(dt_TK_labels), all_of(names(dt_TK_labels)))
renommer a partir d'une liste.
Example
Renommer la colonne uniquement is elle existe rename_with( ~ "nv nom", .cols = any_of("col1"))
Libellés des colonnes
Packages library(labelled)
var_label(dt) <- labels
ajouter un label aux colonnes.var_label(dt)
renvoie les labels (ou attribuer un label). Prend comme valeur unelist(nom_col = "label")
.remove_var_label(dt)
supprimer les labels.colnames(df_labelled) <- var_label(df_labelled)
renommer les colonnes avec les labels.
Importer et exporter
Importer
read_sas(fichier)
lire des tables SAS (packagehaven
).read.csv(ficher, sep = separateur)
lire une table CSV.read.table(fichier)
importer un fichier avec des espaces comme séparateur.-
read.xlsx(fichier, colNames = TRUE, sheet = nom/num)
lire un fichier excel (workbook = wb)library(openxlsx)
. Paramètres :startRow = 2
numéro de la ligne où commencer la lecture.
Exporter
-
write.csv(donnée, file = "fichier.csv" )
enregistrer au format csv.sep = separateur
séparateur.row.names = T
nom des lignes.col.names = T
nom des colonnes.
-
write.table(tableau, file = "clipboard", sep = "\t")
copier dans le presse papier.
Information sur un df
library(tibble)
nrow(data)
renvoie le nbre de lignes.ncol(data)
renvoie le nbre de colonnes.dim(data)
renvoie la taille du data.glimpse(dataset)
description du jeu de données.str(dt)
décrire un jeu de données.
Noms des lignes et des colonnes
colnames(data)
nom des colonnes.rownames(data)
nom des colonnes.column_to_rownames(var = "Accession")
mettre une colonne en nom de lignes et supprimer la colonne.rownames_to_column()
transformer l'index en colonne et supprimer le nom des lignes.rowid_to_column()
transformer le numéro des lignes en colonne.
Manipuler les données avec dplyr
Package : dplyr
, tidyr
. résultat1 %>% résultat2
: rediriger le résultat
pull(data, colonne)
transformer une sortie en vecteur.
Fonctions dplyr
Pour créer des fonctions dplyr {{colonne}}
.
max_by <- function(data, var, is_true) {
data %>%
filter(is_true) %>%
mutate({{var}} := {{var}} + 1)
}
enquo(col1)
récupérer le nom de la colonne (penser à la convertir en caractèrerlang::as_label()
).
Note
Pensez à utiliser tryCatch({...}, error = function(e) {})
lorsque que un paramètre n'est pas nécessairement un nom de colonne dplyr.
Sélecteur de colonnes :
across(.cols, .fns, ..., .names = NULL, .unpack = FALSE)
sélectionner des colonnes avec vecteurs textes.if_any(.cols, .fns, ..., .names = NULL)
if_all(.cols, .fns, ..., .names = NULL)
Note
Pour créer une fonction qui s'applique à un vecteur il peut être utile d'utiliser map
.
Filtrer
filter(condition)
filtrer les données avec une condition (alternativesubset(df, condition)
, pour filter en fonction des noms de lignesrow.names(r$df_pk) %in% filter
).slice(numligne)
garder les lignes.slice_min(col)
ouslice_max(col)
sélectionner les lignes avec les valeurs min ou max pour la colonne.sample_frac(dt, 0.5, replace = TRUE)
sélectionne aléatoirement une fraction d'observations.sample_n(nligne, replace = TRUE)
sélectionne aléatoirement n observations.slice(10:15)
sélectionne les lignes selon leur position.top_n(nlignes, variable)
sélectionne et ordonne les n premières observations (ou groupes si les données sont groupées) (desc()
= décroissant).is.na(data)
renvoie les lignes avec des valeurs manquantes (myDataframe[is.na(dt)] = 0
pour les remplacer).complete.cases(data)
renvoie les lignes avec des valeurs manquantes.case_when(condition1 ~ val1, condition2 ~ val2,..., .default = val)
fonction équivalente au CASE WHEN en SQL.
Sélectionner
select(colonne1, colonne2)
selecionner des colonnes (-one_of(col)
pour enlever une colonne). Soit avec les numéros, soit avec les noms.
En fonction de la position :
everything()
toutes les colonnes restantes.all_of(vecteur)
les colonnes avec le nom de la colonne dans le vecteur.one_of(vecteur)
les colonnes avec le nom de la colonne dans le vecteur. Fonctionne même si la colonne n'existe pas.any_of(vecteur)
les colonnes dont le nom de la colonne n'est pas dans le vecteur.last_col()
la dernière colonne.group_cols()
les colonnes utilisées pour grouper les données.num_range()
la positionwhere(function(){})
les colonnes qui retournent vraies.
Example
select(col13, everything())
déplacer la colonne 13 à la position 1.
En fonction du nom des colonnes :
-
distinct()
supprimer les doublons (renvoie les valeurs uniques pour une variable)..keep_all = TRUE
garder tous les champs.
-
arrange(var1, var2)
trier en ordre décroisssantdesc(var)
. -
.by_group = TRUE
trier par groupe. -
dt[["col1]]
sélectionner une colonne avec son nom en caractère en dehors de dplyr. relocate(col, .before = /.after = )
changer la position d'une colonne.last_col()
a la dernière colonne.
Note
Pour trier une colonne, il faut factor(x, levels = c("el1", "el2"))
.
Fonction | Définition |
---|---|
starts_with(c("deb1", "deb2")) |
commence par. |
ends_with(fin) |
finit par. |
contains(chaine) |
contient la chaine. |
matches(expr_regu) |
correspond à l'expression régulière. |
Note
Utile notamment pour renommer les colonnes rename_with(~fonction(.), .cols = expression)
.
Réorganiser les données
Package tidyr
pivot_longer(cols = col_a_trans, names_to = "nv_nom", values_to = "value")
transformer plusieurs colonnes en une seule variable (pas besoin de préciser les colonnes que l'on souhaite garder).values_fill = 0
valeur utilisée pour les NA.
-
pivot_wider(names_from = "name", values_from = "value")
transformer les modalités en colonnes.id_cols = cols
préciser les colonnes à conserver en id de lignes.values_fill = val
remplacer les valeurs manquantes.
# La variable treatment (avec les modalités A, B, C ...) est transformée en colonne (A, B, C, D). La valeur est la somme des decrease. Chaque ligne correspond à une valeur de rowpos.
OrchardSprays %>%
select(rowpos, treatment, decrease) %>%
pivot_wider(names_from = treatment, values_from = decrease)
Sélectionner les colonnes :
everything()
toutes les colonnes restantes.
Créer de nouvelles variables
mutate(nom = formule)
appliquer une fonction et ajouter une colonne (il est possible d'appliquer à toutes les variables avecsapply
voir ci dessous et, de sélectionner une variable par son nom avec!!sym("col1")
).mutate_all(~as.character(.x))
appliquer la fonction à toutes les colonnes.mutate_if(~fct_test(.x), function(x){drop_units(x)})
oumutate_if(is.numeric, round, digits = 2)
appliquer une fonction aux colonnes avec Vrai.mutate_at(vars(all_of(tr_pk$PPTESTCD)), ~ifelse(end == Inf, T, .))
appliquer une fonction a des colonnes particulières.
Note
Pour ajouter une colonne qui n'existe pas mpg = ifelse("mpg" %in% names(.), mpg, NA))
.
Options :
.before = Value
ou.after=
préciser où insérer la colonne..keep ="none"
ne garder aucune colonne.
Note
Pour utiliser le nom d'une variable stockée dans une variable caractère mutate(!!variable_text := ifelse(condition, !!sym(variable), NA))
.
Note
Pour modifier uniquement certaines lignes, il est possible d'utiliser ifelse(condition, valeur_vrai, valeur_vaux)
.
Note
Pour appliquer une fonction a toutes les variables il faut utiliser sapply
.
Fonction | Description |
---|---|
n() |
Nombre de lignes. |
n_distinct() |
Nombre de lignes distinctes. |
lead() |
Récupérer la valeur de la ligne d'avant. |
lag(col, default = 0/1) |
Récupérer la valeur de la colonne/ligne d'après . |
dense_rank() |
Ordonner sans sauts de rangs. |
min_rank() |
Ordonner avec sauts de rangs. |
percent_rank() |
Rangs de (min rank) entre [0, 1]. |
row_number() |
Ordonner ou numéroter les lignes en affectant aux liens la première position. |
ntile() |
Diviser en n groupes. |
between() |
Les valeurs sont-elles entre a et b. |
cum_dist() |
Distribution cumulée |
cumall() |
Cumul tant que vrai. |
cumany() |
Cumul dès que vrai. |
cummean() |
Moyenne glissante. |
cumsum() |
Somme cumulée. |
cummax() |
Maximum cumulé. |
cummin() |
Minimum cumulé. |
cumprod() |
Produit cumulé. |
pmax() |
Maximum par élément. |
pmin() |
Minimum par élément. |
last() |
Garder la dernière valeur. |
first() |
Garder la première valeur. |
nth(col, n) |
Garder la n-ième valeur. |
cur_group_id() |
Id pour chaque groupe (group_by ). |
Note
Pour les sommes cumulées, il faut utiliser group_by
puis mutate
.
!!! note
row_number()
renvoie aussi le numéro de chaque ligne.
Remplacer une valeur
if_else(condition, true = , false = , missing = )
si alors avec la possibilité de traiter les valeurs manquantes.replace(colonne, which(col == 'Vrai'), new_value)
remplacer des valeurs en fonction d'une condition.
Example
which(col == 'Vrai')[n]
pour remplacer la première valeur ayant la condition vraie.
Apply en lignes et colonnes
Fonction | Définition |
---|---|
rowSums() |
Somme |
colMeans() |
Moyenne (colMeans(is.na(data)) utile pour connaitre le pourcentage de valeurs manquantes). |
sapply(dt, axis = 1/2, fonction)
appliquer une opération à toutes les colonnes ou les lignes.
Grouper les données
data %>% group_by(columns) %>% summarise(indicateur)
Grouper les données :
group_by(var)
grouper les observations par la var (toujours suivi desummarise
).ungroup(iris)
dégrouper le jeu de données.group_split()
séparer le jeu de données en plusieurs (précédé d'ungroup_by
).- Appliquer des fonctions chaque groupe :
group_map(function(x, row_id) {
x %>% transmute(
var1 = a + b,
var2 = c/2)
}
group_vars()
print the names of grouping variables.tally(sort = T)
tableau des effectifs.summarise(nom = formule)
appliquer une fonction.summarise_all(fonction)
appliquer une fonction à chaque variable.count(variable, wt = valeur)
dénombrer le nombre d'observations de chaque valeur d'une variable.
Fonction | Défintion |
---|---|
min |
Minimum |
max |
Maximum |
mean |
Moyenne |
median |
Médiane |
sd |
Ecart-type |
Note
group_by()
peut s'utiliser avec mutate()
pour appliquer une fonction à chaque groupe, slice(n)
pour garder les n premières lignes de chaque groupe.
Les jointures
A %>% jointure(B)
inner_join(data)
A et Bleft_join(data)
A (+ A et B)right_join(data)
B (+ A et B)semi_join(data)
B et pas A.anti_join(data)
A et pas B.full_join(data)
A ou B.
Option :
by = c("col1" = "col2")
préciser la jointure.keep = T
garder les colonnes qui ont servi de jointure.
Note
Pour comparer deux dataframes, on peut utiliser anti_join()
. Les lignes différentes seront renvoyées.
Fusions lignes et colonnes
bind_cols(nom = valeur)
ajouter à y comme nouvelles colonnes.add_column(data, column,...)
ajouter de nouvelles colonnes (tibble
).add_row(x = 4, y = 0)
ajouter une ligne.merge_v(j = ~ niv1, target = c("niv1", "niv2"))
fusionner en colonne.bind_rows(df2)
fusionner deux dataframes au niveau des lignes (ajout au niveau des colonnes avec un nom identique).dt[nrow(dt) + 1,] = vecteur
ajouter une ligne sous forme de vecteur.
Opérateurs ensemblistes
intersect(y, z)
observations appartenant à y et z.setdiff(y, z)
observations appartenant à y et pas à z.union(y, z)
observations appartenant à y et z ou l'un des 2.