Ich habe Probleme mit Code, den ich für die Datenverwaltung benötige. Ich entschuldige mich im Voraus, weil ich sicher bin, dass es eine recht einfache Lösung gibt, aber ich konnte keine anderen Informationen finden.

Ich analysiere Daten im Langformat mit dem Befehl mlogit in R. Für jeden Auswahlsatz sollte eine Alternative ausgewählt werden. Andernfalls schlägt der Befehl mlogit mit dem folgenden Fehler fehl:

Error in if (abs(x - oldx) < ftol) { : 
missing value where TRUE/FALSE needed

Für meinen Datensatz gibt es tatsächlich einige Auswahlsätze, bei denen keine Alternative ausgewählt wird. Meine Frage lautet daher: Wie kann ich alle Zeilen eines Auswahlsatzes löschen, für den keine Alternative ausgewählt ist? In diesem Beispiel möchte ich alle Zeilen für ID 2 löschen, da dieser Befragte keine Auswahl trifft:

enter image description here

D.h. der Wert der Auswahlvariablen ist immer "FALSE".

Jede Hilfe sehr geschätzt!

1
James 24 Dez. 2015 im 05:16

2 Antworten

Verwenden Sie ave in Kombination mit any (Ausleihen von @ Richos df):

df[ave(df$CHOICE, df$ID, FUN=any),]
#   ID CHOICE   ALT
#1   1  FALSE TRAIN
#2   1   TRUE   CAR
#3   1  FALSE   BUS
#7   3   TRUE TRAIN
#8   3  FALSE   CAR
#9   3  FALSE   BUS
#10  3  FALSE  BIKE
2
thelatemail 24 Dez. 2015 im 04:00

Bitte schön:

library(dplyr)
df <- df %>% group_by(ID) %>% mutate(sum = sum(CHOICE))
df <- df[df$sum != 0 , ]

Oder verwenden Sie die filter -Funktion von dplyr:

df %>% group_by(ID) %>% filter(any(CHOICE))

Daten:

df <- data.frame(ID = c(1,1,1,2,2,2,3,3,3,3),
                 CHOICE = c(F,T,F,F,F,F,T,F,F,F),
                 ALT = c("TRAIN", "CAR", "BUS","TRAIN", "CAR", "BUS","TRAIN", "CAR", "BUS","BIKE"))
2
talat 24 Dez. 2015 im 09:12