While/mehrere Bedingungen/Code funktioniert nicht

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
blacklabel5

While/mehrere Bedingungen/Code funktioniert nicht

Beitrag 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??
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: While/mehrere Bedingungen/Code funktioniert nicht

Beitrag von jogo »

Der Vergleichsoperator ist '=='; das ist etwas anderes als '='.

Gruß, Jörg
blacklabel5

Re: While/mehrere Bedingungen/Code funktioniert nicht

Beitrag 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 :(
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: While/mehrere Bedingungen/Code funktioniert nicht

Beitrag 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.
Antworten