Fehler: { : missing value where TRUE/FALSE needed
Fehler: { : missing value where TRUE/FALSE needed
Hallo,
R treibt mich mal wieder zum Wahnsinn!!
in einer for-Schleife versuche ich bestimmt Werte zu berechnen:
if (daten[,e1] <=x) {daten[e2]= 1}
else if (daten[,e1] > x & daten[,e1] <=y) {daten[e2]= 2}
else {daten[e2] = 3}
es kommt die Fehlermeldung: Error in if (daten[, e1] <= 1.0) { : missing value where TRUE/FALSE needed
Mir ist klar, dass x=NA sein kann und somit der Fehler entsteht.
Aber was soll tun, es sind nunmal NA´s in der Liste enthalten.
Hat jemand einen Lösungsvorschlag??
Danke.
R treibt mich mal wieder zum Wahnsinn!!
in einer for-Schleife versuche ich bestimmt Werte zu berechnen:
if (daten[,e1] <=x) {daten[e2]= 1}
else if (daten[,e1] > x & daten[,e1] <=y) {daten[e2]= 2}
else {daten[e2] = 3}
es kommt die Fehlermeldung: Error in if (daten[, e1] <= 1.0) { : missing value where TRUE/FALSE needed
Mir ist klar, dass x=NA sein kann und somit der Fehler entsteht.
Aber was soll tun, es sind nunmal NA´s in der Liste enthalten.
Hat jemand einen Lösungsvorschlag??
Danke.
Re: Fehler: { : missing value where TRUE/FALSE needed
Hallo baroso,
willkommen im Forum!
Was ist denn das für ein Objekt mit dem Namen daten ?
Kannst Du bitte mal den Output vonin Deine nächste Nachricht kopieren?
BTW:
Beachte den Unterschied zwischen daten[e2] und daten[, e2]
Und was soll passieren bei den NA-Werten?
Gruß, Jörg
willkommen im Forum!
Was ist denn das für ein Objekt mit dem Namen daten ?
Kannst Du bitte mal den Output von
Code: Alles auswählen
str(Daten)
BTW:
Beachte den Unterschied zwischen daten[e2] und daten[, e2]
Und was soll passieren bei den NA-Werten?
Gruß, Jörg
Re: Fehler: { : missing value where TRUE/FALSE needed
hallo Jörg,
danke für die schnelle Antwort.
in daten sind verschiedene Zahlenwerte abgelegt (siehe unten)
mit daten[,e1] spreche ich den Spaltenwert eines vorher selektierten (for Schleife)Datensatzes an.
mit daten[e2] bestimme ich die spalte in der das ergebnis geschrieben werden soll.
hoffe das stimmt soweit.
Wenn x=NA ist sollte nix passieren, d.h. keine Berechnung möglich also Ergebnis = NA
Danke fürs mitdenken...
> str(daten)
'data.frame': 1 obs. of 56 variables:
$ NR : int 2016
$ PROJECT : Factor w/ 1 level "oid_28": 1
$ PROBENART : Factor w/ 1 level "just": 1
$ VAR_ID : int 256
$ PROBE : Factor w/ 161 levels "NR_01","NR_02",..: 14
$ MHIJH_ST : logi NA
$ IKH_ID : Factor w/ 7 levels "fi7_1","iu2_3",..: 1
$ KA: int 1
$ KLK: int 1
$ REMARKS : Factor w/ 6 levels "","just3, keine Probe",..: 1
$ NO_ : int 256558
$ date: Factor w/ 3 levels "09-Mrz-16","09-Mrz-16",..: 1
$ OIU: logi NA
$ O : num 0.1
$ O_SI : Factor w/ 2 levels "","g/kg [171]": 2
$ ZUZ: num 3.83
...
danke für die schnelle Antwort.
in daten sind verschiedene Zahlenwerte abgelegt (siehe unten)
mit daten[,e1] spreche ich den Spaltenwert eines vorher selektierten (for Schleife)Datensatzes an.
mit daten[e2] bestimme ich die spalte in der das ergebnis geschrieben werden soll.
hoffe das stimmt soweit.
Wenn x=NA ist sollte nix passieren, d.h. keine Berechnung möglich also Ergebnis = NA
Danke fürs mitdenken...
> str(daten)
'data.frame': 1 obs. of 56 variables:
$ NR : int 2016
$ PROJECT : Factor w/ 1 level "oid_28": 1
$ PROBENART : Factor w/ 1 level "just": 1
$ VAR_ID : int 256
$ PROBE : Factor w/ 161 levels "NR_01","NR_02",..: 14
$ MHIJH_ST : logi NA
$ IKH_ID : Factor w/ 7 levels "fi7_1","iu2_3",..: 1
$ KA: int 1
$ KLK: int 1
$ REMARKS : Factor w/ 6 levels "","just3, keine Probe",..: 1
$ NO_ : int 256558
$ date: Factor w/ 3 levels "09-Mrz-16","09-Mrz-16",..: 1
$ OIU: logi NA
$ O : num 0.1
$ O_SI : Factor w/ 2 levels "","g/kg [171]": 2
$ ZUZ: num 3.83
...
Re: Fehler: { : missing value where TRUE/FALSE needed
Hallo baroso,
Du meinst jetzt aber nicht daten$e1 bzw. daten$e2 (bitte auch beachten, dass R pingelig ist bezüglich Groß- oder Kleinschreibung):
daten$e2 ist etwas anderes als daten$E2
Da Du den Vergleich mit einem Vektor (einer ganzen Spalte) durchführen möchtest, kannst Du nicht if (...) ... verwenden. Du solltest Dir die Funktion ifelse(...) anschauen. Das könnte dann evtl. so aussehen:
bestimmt kann man alternativ auch cut() verwenden.
Bezüglich der NA macht das R so: wenn ein Wert eine Operation NA ist, dann ist auch das Ergebnis NA
(das ist so, wie Du es möchtest).
Gruß, Jörg
p.s.:
Das ist richtig, dass Dein Dataframe nur eine Beobachtung hat?
Kann es sein, dass Du ursprünglich 161 Beobachtungen hattest?
leider ist das falsch. Wenn daten ein Dataframe ist, dann indiziert daten[e2] den Dataframe als Liste. Das Ergebnis ist nicht ein Vektor sondern ein Dataframe (also eine Liste).baroso hat geschrieben: ↑Di Mär 06, 2018 11:51 am in daten sind verschiedene Zahlenwerte abgelegt (siehe unten)
mit daten[,e1] spreche ich den Spaltenwert eines vorher selektierten (for Schleife)Datensatzes an.
mit daten[e2] bestimme ich die spalte in der das ergebnis geschrieben werden soll.
hoffe das stimmt soweit.
Du meinst jetzt aber nicht daten$e1 bzw. daten$e2 (bitte auch beachten, dass R pingelig ist bezüglich Groß- oder Kleinschreibung):
daten$e2 ist etwas anderes als daten$E2
Code: Alles auswählen
Wenn x=NA ist sollte nix passieren, d.h. keine Berechnung möglich also Ergebnis = NA
Danke fürs mitdenken...
Code: Alles auswählen
daten$e2 <- 2
daten$e2 <- ifelse(daten$e1 <=x, 1, daten$e2)
daten$e2 <- ifelse(daten$e1 >y, 3, daten$e2)
Bezüglich der NA macht das R so: wenn ein Wert eine Operation NA ist, dann ist auch das Ergebnis NA
(das ist so, wie Du es möchtest).
$e1 bzw. $E1 waren jetzt nicht zu sehen - die kommen dann später in der Ausgabe, richtig?Code: Alles auswählen
> str(daten) 'data.frame': 1 obs. of 56 variables: $ NR : int 2016 ...
Gruß, Jörg
p.s.:
Das ist richtig, dass Dein Dataframe nur eine Beobachtung hat?
Kann es sein, dass Du ursprünglich 161 Beobachtungen hattest?
Die Schleife hast Du uns auch bisher nicht gezeigt ...in einer for-Schleife versuche ich bestimmt Werte zu berechnen: ...
Re: Fehler: { : missing value where TRUE/FALSE needed
Ja mit elseif funktioniert es.
Danke!!
(warum if bei NA´s nicht funktioniert, ist mir aber immer noch unklar).
p.s.:
Das ist richtig, dass Dein Dataframe nur eine Beobachtung hat?
Kann es sein, dass Du ursprünglich 161 Beobachtungen hattest?
- ja, das ist noch ein Problem. habe die Daten mit subset bis auf eine Datenzeile reduziert.
Hierzu folgende Skriptzeilen. Kann man mit einer Schleife (oder wie auch immer) die Zeilensumme für jede Zeile berechnen und dies zusammen in ein dataframe abspeichern? Steh absolut auf dem Schlauch...
x=c(1,2,3,4,5,6,7,8,9,10)
y=c(21,22,23,24,25,26,27,28,29,30)
daten=cbind(x,y)
daten
# wie erstelt man eine zusätzliche Spalte ("Summe") in der die Summe der jeweiligen Zeile steht?
Danke!!
(warum if bei NA´s nicht funktioniert, ist mir aber immer noch unklar).
p.s.:
Das ist richtig, dass Dein Dataframe nur eine Beobachtung hat?
Kann es sein, dass Du ursprünglich 161 Beobachtungen hattest?
- ja, das ist noch ein Problem. habe die Daten mit subset bis auf eine Datenzeile reduziert.
Hierzu folgende Skriptzeilen. Kann man mit einer Schleife (oder wie auch immer) die Zeilensumme für jede Zeile berechnen und dies zusammen in ein dataframe abspeichern? Steh absolut auf dem Schlauch...
x=c(1,2,3,4,5,6,7,8,9,10)
y=c(21,22,23,24,25,26,27,28,29,30)
daten=cbind(x,y)
daten
# wie erstelt man eine zusätzliche Spalte ("Summe") in der die Summe der jeweiligen Zeile steht?
Re: Fehler: { : missing value where TRUE/FALSE needed
Unter Verwendung von code - Tags, um den Code lesbarer zu machen:
HTH,
Bernhard
Code: Alles auswählen
bsp <- data.frame(a=c(-1,0,2), b=c(-2, -1, 3))
print(bsp)
#Zusätzliche Summenspalte
bsp$Zeilensumme <- rowSums(bsp)
print(bsp)
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Fehler: { : missing value where TRUE/FALSE needed
Code: Alles auswählen
daten <- cbind(
x=c(1,2,3,4,5,6,7,8,9,10),
y=c(21,22,23,24,25,26,27,28,29,30))
daten
s <- rowSums(daten)
D <- cbind(daten, s)
# noch schöner geht es mit Dataframes:
daten <- data.frame(
x=c(1,2,3,4,5,6,7,8,9,10),
y=c(21,22,23,24,25,26,27,28,29,30))
daten$Summe <- rowSums(daten)
p.s.:
Bitte mal lesen: viewtopic.php?f=20&t=29
und in den nächsten Nachrichten selber die Formatierung anwenden.
Re: Fehler: { : missing value where TRUE/FALSE needed
simpel...
geht das auch mit logischen Verknüpfungen.
z.B. prüfe für alle Zeilen, ob x > y ist. Füge in neuer Spalte ("Prüf") 1 für ja und 2 für nein ein.
Dafür ist eine Schleife notwendig, oder geht das auch ohne??
Danke!
geht das auch mit logischen Verknüpfungen.
z.B. prüfe für alle Zeilen, ob x > y ist. Füge in neuer Spalte ("Prüf") 1 für ja und 2 für nein ein.
Dafür ist eine Schleife notwendig, oder geht das auch ohne??
Danke!
Re: Fehler: { : missing value where TRUE/FALSE needed
geht alles ohne Schleife:
Du kannst doch damit leben, dass dort einfach die logischen Werte TRUE bzw. FALSE stehen, oder?
... oder Du nimmst wieder ifelse()
Eigentlich sind die meisten Objekte, mit denen R rumwirbelt, mindestens Vektoren. Man muss sich daran gewöhnen (besonders wenn man vorher nur Programmiersprachen der 3. Generation kennengelernt hat), dass man immer gleich mit den ganzen Objekten arbeitet.
Gruß, Jörg
Code: Alles auswählen
daten <- data.frame(
x=c(1,2,3,4,105,6,107,8,9,10),
y=c(21,22,23,24,25,26,27,28,29,30))
daten$x.gt.y <- with(daten, x>y)
... oder Du nimmst wieder ifelse()
Code: Alles auswählen
daten$x.gt.y <- with(daten, ifelse(x>y, "ja", "nein"))
Gruß, Jörg
Re: Fehler: { : missing value where TRUE/FALSE needed
Danke! Ihr seid super!!