web-dev-qa-db-fra.com

Appliquer une fonction à tous les éléments d'un bloc de données

J'essaie d'appliquer des transformations à tous les éléments d'une trame de données.

Lorsque j'utilise les fonctions régulières d'application, je récupère une matrice et non une trame de données. Existe-t-il un moyen d'obtenir directement une trame de données sans ajouter as.data.frame à chaque ligne?

df = data.frame(a = LETTERS[1:5], b = LETTERS[6:10])

apply(df, 1, tolower) #Matrix
apply(df, 2, tolower) #Matrix
sapply(df, tolower)   #Matrix

as.data.frame(sapply(df, tolower)) # Can I avoid "as.data.frame"?
14
Deena

Nous pouvons utiliser lapply et l'affecter à nouveau à 'df'

df[] <- lapply(df, tolower)

Le [] conserve la même structure que l'ensemble de données d'origine. Utiliser apply le convertit en matrix et ce n'est pas recommandé.

20
akrun

Voici un moyen d'utiliser dplyr:

library(dplyr)
df  %>% mutate_each(funs(tolower))
8
Tim Goodman