2016-06-07 11 views
0

Ich versuche eine Spalte für meine Datenmenge zu codieren, wenn es mehr als eine Ebene gibt, nachdem die Daten durch einige Faktoren gruppiert wurden. Der Einfachheit halber verwende ich den Datensatz mtcars als Beispiel. Ich bekomme immer den Fehler "Fehler: Filterbedingung wird nicht zu einem logischen Vektor ausgewertet."Verwenden von Dplyr zum Codieren mehrerer Ebenen innerhalb einer Gruppe

Klar ist diese Syntax nicht akzeptabel, aber hat jemand einen clevereren Weg, dies zu tun?

df_levels <- mtcars %>% 
    group_by(mpg) %>% 
    filter(nlevels(.$gear) > 1) %>% 
    mutate(Levels = 1) ##encode with a boolean value indicating more than one level 

und

df_levels <- df_levels %>% 
    group_by(mpg) %>% 
    filter(nlevels(.$gear) < 1) %>% 
    mutate(Levels = 0) 

Also, wenn Sie auf den neuen df "df_levels" klicken, und sortieren nach mpg in der df viewer, würden Sie eine Spalte "Ebenen" = 0 für Einträge mit 10,4 sehen mpg (weil es nur Daten mit gear = 3 gibt) und die Spalte "levels", die mit 30,4 mpg verknüpft sind, hätte den Wert = 1, da es mehr als eine Ebene für den Gang in dieser Datengruppierung gibt (gear = 4, gear = 5) .

+0

str (mtcars $ Gang) num [01.32] 4 4 4 3 3 3 3 4 tun könnten 4 4 ... – Gopala

Antwort

1
mtcars %>% 
    group_by(cyl) %>% 
    mutate(Levels = ifelse(nlevels(as.factor(gear)) > 1, 1, 0)) 
+0

Immer noch nicht sicher, dass das funktioniert .. sagen Sie, dass Sie nach mpg gruppieren, und sind mit den nlevels der Ausrüstung betroffen. Sie würden erwarten, dass der neue DF in den Spaltenstufen für die 10,4-mpg-Einträge den Wert '0' und für die 30,4-mpg-Einträge den Wert '1' hat. Ich denke @BryanGoggin hat das gleiche Problem. –

+0

Können Sie vielleicht klären, was Ihre erwartete Ausgabe ist, indem Sie die Frage bearbeiten? – Gopala

+1

@jacobOdom, wenn Sie die Gruppe zu mpg wechseln, erhalten Sie genau die Ergebnisse, die Sie vorgeschlagen haben. Hier ist der Code: 'mtcars%>% group_by (mpg)%>% mutieren (Levels = ifelse (nlevels (as.factor (getriebe))> 1, 1, 0))' –

1

Die Variable gear in mtcars ist kein Faktor, so dass ich denke du meinst

mtcars$gear<-as.factor(mtcars$gear) 

Dann versuchen Sie dies:

library(dplyr) 
mtcars %>% 
    group_by(cyl) %>% 
    filter(nlevels(.$gear) > 1) %>% 
    mutate(Levels = 1) 

Ich bin nicht sicher, ob Ihre Frage, ob das, was Sie ist ist danach, aber es gibt zumindest keinen Fehler zurück.

Und klar zu sein, die dplyr Syntax ist so, dass Sie sehr sauber

mtcars %>% 
group_by(cyl) %>% 
filter(nlevels(gear) > 1) %>% 
mutate(Levels = 1) 
+0

Immer noch nicht sicher, dass das funktioniert .. sagen Sie, dass Sie nach mpg gruppieren und sich mit den nlevels der Ausrüstung befassen. Sie würden erwarten, dass der neue DF in den Spaltenstufen für die 10,4-mpg-Einträge den Wert '0' und für die 30,4-mpg-Einträge den Wert '1' hat. –

+0

Ich entschuldige mich, ich habe nicht verstanden, was Sie versucht haben zu tun. Ich habe nur deine ursprüngliche Syntax festgelegt. Ich bin froh, dass @ Edward R. Mazurek helfen konnte. –

Verwandte Themen