Je veux faire cette boucle for pour chaque colonne de mon dataframe mais j'ai une erreur avec la méthode group by:

Erreur dans la méthode d'utilisation ("group_by_"): aucune méthode applicable pour "group_by_" appliquée à un objet de la classe "caractère"

Mon code:

for(i in colnames(creditDF)){
 distribution <- creditDF %>%
  group_by(i) %>%
  summarise(value = n()) %>%
  select(label = i, value)

 print(distribution)
}

Comment puis-je corriger cette erreur?

Merci de votre aide.

0
Bourg 30 nov. 2017 à 00:46

3 réponses

Meilleure réponse

Si je comprends bien votre code Vous souhaitez connaître les éléments uniques de chaque colonne de votre bloc de données et imprimer le tableau sur la console

for(i in colnames(creditDF)){
 distribution <- creditDF %>%
  group_by_at(.vars = i) %>%
  summarise(value = n())

 print(distribution)
}
0
R Thomas 29 nov. 2017 à 22:19

Solution avec la base R.

for(i in creditDF) print(as.data.frame(table(i)))
0
Gregory Demin 30 nov. 2017 à 19:41

Je propose une alternative plus ordonnée qui crée une table de fréquences par colonne et les lie dans une seule trame de données.

library(dplyr)
library(purrr)

mtcars %>%
  map(~table(.x)) %>%
  lapply(as_tibble) %>%
  bind_rows(.id = "var")

# # A tibble: 171 x 3
#     var    .x     n
#   <chr> <chr> <int>
# 1   mpg  10.4     2
# 2   mpg  13.3     1
# 3   mpg  14.3     1
# 4   mpg  14.7     1
# 5   mpg    15     1
# 6   mpg  15.2     2
# 7   mpg  15.5     1
# 8   mpg  15.8     1
# 9   mpg  16.4     1
# 10  mpg  17.3     1
# # ... with 161 more rows
2
Kevin Arseneau 29 nov. 2017 à 22:37
47562383