2017-11-29 1 views
0

Das mag ich in meinem Datenrahmen für jeden colname for-Schleife machen, aber ich habe einen Fehler mit group_by Methode:For-Schleife mit dplyr Paket

Fehler in usemethod ("group_by_"): keine anwendbare Methode für ‚group_by_ 'zu einem Objekt der Klasse "Charakter" angewendet

Mein Code:

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

print(distribution) 
} 

Wie kann ich diesen Fehler beheben?

Danke für Ihre Hilfe.

+0

Sie müssen nicht in einer Schleife über die einfach Spalten 'summarise_at' verwenden und Sie in den Spalten geben wollen –

+1

' group_by_at' zusammenfassen wird Saiten nehmen, Das ist eine Möglichkeit, wenn Sie die Schleife brauchen. – aosmith

+0

Ich möchte keine Zusammenfassung für jede Spalten machen Ich möchte es automatisieren – Bourg

Antwort

0

Wenn ich das Verständnis des Code richtig Sie mögen die einzigartigen Gegenstände, um herauszufinden, in jeder Spalte in Datenrahmen und drucken Sie die Tabelle auf die Konsole

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

print(distribution) 
} 
1

ich eine ordentlich Alternative bieten das erstellt eine Häufigkeitstabelle für Spalte und bindet sie in einem einzelnen Datenrahmen.

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 
0

Lösung mit Basis R.

for(i in creditDF) print(as.data.frame(table(i)))