2017-08-23 5 views
0

Ich habe einen Datensatz von einer Umfrage, die mehrere ähnliche Variablen aufgrund der Art, wie die Umfrage eingerichtet werden musste. Zum Beispiel habe ich 20 verschiedene Variablen für den Preis von mittlerem Soda im Jahr 2016. Eine Einrichtung hat nur eine Antwort auf eine mittlere Soda Frage (es hängt von der Art der Anlage ab, die sie waren). Ich möchte diese zusammen in R hinzufügen, um eine mittlere Sodavariable für alle Einrichtungen zu erhalten. Ein Beispiel dafür, wie die Daten aussehen, finden Sie unten.nicht-numerisches Argument zum binären Operator: numerische Variablen in R addieren

Q5a_MediumSoda_Coffee: 2.25, 3.35, NA, NA, NA, NA, NA... 
Q6a_Mediumsoda_Burgers:NA,NA, 2.50, NA, NA, NA, NA... 
Q7a_MediumSoda_Thai:NA,NA,NA,NA,2.30, 1.50, 2.75.. 

ich versucht, alle diese Variablen in eine kombinieren, indem sie die Addition:

MediumSoda2016<-sum(Q5a_16_MedS_FSCoff+Q7a_16_MedS_FSAsian+Q9a_16_MedS_FSAmer+Q11a_16_MedS_FSDeli+Q13a_16_MedS_FSMex+Q15a_16_MedS_FSPizza+Q17a_16_MedS_FSPub+Q19a_16_MedS_FSBurgers+Q21a_16_MedS_FSItalian+Q23a_16_MedS_FSBBQRibs+Q25a_16_MedS_FSSeafood+Q27a_16_MedS_FSMed_Greek+Q29a_16_MedS_FSIndian+Q31a_16_MedS_FSOther, na.rm=TRUE)* 

Allerdings bekomme ich folgende Fehlermeldung:

Error in Q5a_16_MedS_FSCoff + Q7a_16_MedS_FSAsian + Q9a_16_MedS_FSAmer + : 
    non-numeric argument to binary operator 

I geprüft und alle Variablen sind numerisch also nehme ich an, es ist ein Problem mit der Summenfunktion (und ich verwende die falsche Funktion), aber ich kann nicht herausfinden, welchen Code ich benutzen soll. Meine Hoffnung ist, alle diese zu kombinieren, so dass ich eine Spalte von mittleren Sodadaten mit Preisen für jede Einrichtung in dieser Spalte habe. Jede Hilfe würde sehr geschätzt werden.

+2

Scheint wie eine Ihrer Variablen ist nicht numerisch oder Sie haben es falsch eingegeben. Nicht viel, um hier ohne ein richtiges [reproduzierbares Beispiel] weiterzumachen (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). Die Kombination von 'sum()' und '+' erscheint seltsam. Es ist mir unklar, ob Sie einen einzelnen Wert oder einen einzelnen Wert pro Zeile wünschen. Haben Sie darüber nachgedacht, alle diese Variablen in einen geeigneten Datenrahmen zu setzen, anstatt mit einer Reihe verschiedener Vektoren zu arbeiten? – MrFlick

+0

Am Ende des Anrufs steht ein Stern: '..., na.rm = TRUE) *'. Was immer die nächste Zeile startet, ist wahrscheinlich nicht numerisch. –

Antwort

0

nehmen Sie den Rat von MrFlick und kombinieren Sie zuerst Ihre Daten in einen Datenrahmen. Verwenden Sie dann die Funktion ifelse, um eine neue Variable zu erstellen, abhängig davon, ob eine der anderen Variablen NA ist.

# assuming the three "variables" are vectors 
df <- data.frame(Q5a_MediumSoda_Coffee, Q6a_Mediumsoda_Burgers, Q7a_MediumSoda_Thai) 

# use vectorized operation as well as ifelse to create new variable 
df$median <- ifelse(is.na(df$Q5a_MediumSoda_Coffee), df$Q6a_Mediumsoda_Burgers, df$Q5a_MediumSoda_Coffee) 
df$median <- ifelse(is.na(df$median), df$Q7a_MediumSoda_Thai, df$median) 
Verwandte Themen