90 votes

Convertir de minuscules en majuscules toutes les valeurs de toutes les variables de caractères dans la base de données

J'ai un cadre de données mixte de variables numériques et de caractères.

city,hs_cd,sl_no,col_01,col_02,col_03
Austin,1,2,,46,Female
Austin,1,3,,32,Male
Austin,1,4,,27,Male
Austin,1,5,,20,Female
Austin,2,2,,42,Female
Austin,2,1,,52,Male
Austin,2,3,,25,Male
Austin,2,4,,22,Female
Austin,3,3,,30,Female
Austin,3,1,,65,Female

Je souhaite convertir en majuscules tous les caractères minuscules de la base de données. Existe-t-il un moyen de le faire en une seule fois sans avoir à le faire de manière répétée sur chaque variable de caractère ?

91voto

juba Points 15701

A partir de l'échantillon de données suivant :

df <- data.frame(v1=letters[1:5],v2=1:5,v3=letters[10:14],stringsAsFactors=FALSE)

  v1 v2 v3
1  a  1  j
2  b  2  k
3  c  3  l
4  d  4  m
5  e  5  n

Vous pouvez utiliser :

data.frame(lapply(df, function(v) {
  if (is.character(v)) return(toupper(v))
  else return(v)
}))

Ce qui donne :

  v1 v2 v3
1  A  1  J
2  B  2  K
3  C  3  L
4  D  4  M
5  E  5  N

62voto

Trenton Hoffman Points 691

A partir de la dplyr vous pouvez également utiliser le paquet mutate_all() en combinaison avec la fonction toupper() . Cela concerne à la fois les classes de personnages et les classes de facteurs.

library(dplyr)
df <- mutate_all(df, funs=toupper)

10voto

Shalini Baranwal Points 595

C'est simple avec la fonction apply de R

f <- apply(f,2,toupper)

Il n'est pas nécessaire de vérifier si la colonne est de type caractère ou autre.

7voto

Une autre solution consiste à utiliser une combinaison de mutate_if() y str_to_upper() toutes deux issues du paquetage tidyverse :

df %>% mutate_if(is.character, str_to_upper) -> df

Cette opération convertit toutes les variables de type chaîne de caractères de la base de données en majuscules. str_to_lower() faire le contraire.

7voto

LMc Points 725

Dplyr >= 1.0.0

Les verbes scopés qui se terminent par _if , _at , _all ont été remplacés par l'utilisation de across() en packageVersion("dplyr") 1.0.0 ou plus récent. Pour ce faire, il faut utiliser across :

df %>% 
  mutate(across(where(is.character), toupper))
  • Le premier argument de across est de savoir quelles colonnes transformer à l'aide de tidyselect syntaxe. La syntaxe ci-dessus appliquera la fonction à toutes les colonnes qui sont des caractères.
  • Le deuxième argument de across est la fonction à appliquer. Cette fonction prend également en charge la syntaxe de type lambda : ~ toupper(.x) qui facilitent et clarifient la définition d'arguments de fonction supplémentaires.

Données

df <- structure(list(city = c("Austin", "Austin", "Austin", "Austin", 
"Austin", "Austin", "Austin", "Austin", "Austin", "Austin"), 
    hs_cd = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L), sl_no = c(2L, 
    3L, 4L, 5L, 2L, 1L, 3L, 4L, 3L, 1L), col_01 = c(NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA), col_02 = c(46L, 32L, 27L, 20L, 
    42L, 52L, 25L, 22L, 30L, 65L), col_03 = c("Female", "Male", 
    "Male", "Female", "Female", "Male", "Male", "Female", "Female", 
    "Female")), class = "data.frame", row.names = c(NA, -10L))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X