Seite 1 von 1

While/mehrere Bedingungen/Code funktioniert nicht

Verfasst: Mo Dez 10, 2018 9:45 am
von blacklabel5
Hallo liebes Forum,

hatte bereits gefragt, wie ich für meine Aufgabe Symbole extrahieren kann; komme leider auch bei der nächsten aufgabe nicht weiter.
Eine Firma bietet Produkte zu unterschiedlichen Preisen an. Entweder zahlt die Mutter- oder Tocherfirma.

Der Datensatz hat 8 Spalten: u.a. Mutterfirma ID (Spalte 1), Tochterfirma ID (Spalte 3), das Produkt (Spalte 5), Preis Mutterfirma (Spalte 6), Preis Tochter (Spalte 7) sowie die Währung (USD, EUR...) (Spalte 8).

Für eine Analyse sollen alle Entitäten drinnen bleiben, die kleiner sind, als die Standardbepreisung.
Also z.B. Produkt_A für Kunde 123 ist soll mit 10 EUR abgerechnet werden, wird aber, warum auch immer, mit 8 abgerechnet.

Da es mehrere Währungen gibt (RUB, EUR...), ist die Bepreisung natürlich sehr unterschiedlich (z.B. 5000 RUB, 20 EUR...). D.h. man muss zwischen den Währungen unterscheiden.

Mein Vorgehen: Wenn der Preis größer als der Soll-Preis ist, schmeiße ich ihn einfach raus, dann bleiben nur die kleinen übrig:
Zeilen_Data <- nrow(Data)

i <- 1
while (i <= Zeilen_Data) {
if (Data[i,8] ="EUR" & Data[i,6] > 10 | Data[i,7] > 10) {
Data[i,] <- Data[-i,]
i <- i + 1
} else if (Data[i,8] ="RUB" & (Data[i,6] > 550 | Data[i,7] > 550)) {
Data <- Data[-i,]
i <- i + 1
}
else
i <- i+1

}
Mir zerhaut es jedoch ALLES.
Fehlermeldungen (u.a.):

- unexpected '=' in:
- Error: unexpected '}' in " }"
- replacement element 1 has xxx rows to replace 1 rows

und ganz besonders schlimm:

missing value where TRUE/FALSE needed

Kann mir bitte jmd. helfen??

Re: While/mehrere Bedingungen/Code funktioniert nicht

Verfasst: Mo Dez 10, 2018 11:43 am
von jogo
Der Vergleichsoperator ist '=='; das ist etwas anderes als '='.

Gruß, Jörg

Re: While/mehrere Bedingungen/Code funktioniert nicht

Verfasst: Mo Dez 10, 2018 12:13 pm
von blacklabel5
hmmm ok...
habe daran rumgeschraubt, herausgekommen ist das:
dat ist meine data.frame
dat[,6] <- as.numeric(dat[,6])
dat[,7] <- as.numeric(dat[,7])
dat[,8] <- as.character(as.integer(dat[,8]))
i <- 1
dat1 <- dat[0,]

for(i in 1:5) {
if (dat[i,8] == "EUR" & dat[i,6] < 4 & dat[i,7] < 4) {
dat1[i,] <- dat[i,]
} else if (dat[i,8] == "USD" & dat[i,6] < 5 & dat[i,7] <5) {
dat1[i,] <- dat[i,]
}
}

dat1
die treffer speichere ich in einen neuen dataframe (dat1). es werden allerdings keine einträge in dat1 gespeichert :(

Re: While/mehrere Bedingungen/Code funktioniert nicht

Verfasst: Mo Dez 10, 2018 12:53 pm
von jogo
Nehmen wir mal an, in einem dat[i, 8] steht "EUR". Dann macht dat[,8] <- as.character(as.integer(dat[,8])) folgendes auf der rechten Seite:

Code: Alles auswählen

as.integer("EUR")
as.character(as.integer("EUR"))
aber vielleicht war die 8. Spalte ein Faktor:

Code: Alles auswählen

x <- as.factor(c("EUR", "USD"))
as.integer(x)
as.character(as.integer(x))
Anschließend willst Du ja dieses Ergebnis mit "EUR" (oder "USD") vergleichen ...

Aber vielleicht stellt sich noch heraus, dass Du folgendes möchtest:

Code: Alles auswählen

dat[, 8] <- as.character(dat[, 8])
dat1 <- dat[
  (dat[, 8] == "EUR" & dat[, 6] < 4 & dat[, 7] < 4) | 
  (dat[, 8] == "USD" & dat[, 6] < 5 & dat[, 7] < 5) , ]
dat1
Gruß, Jörg
p.s.: Die Tags für die Formatierung von Code werden von dem Knopf </> erzeugt.