2016-06-16 13 views
0

Ich versuche, den Preis eines Produkts in R zu berechnen. Da nicht alle Produkte verkauft wurden, haben einige keinen tatsächlichen Verkaufspreis. Ich möchte den Verkaufspreis berechnen und eine Leerstelle für Werte ohne Verkaufspreis zurückgeben.Bedingte Aufteilung in R

Ich begann mit dieser Funktion, aber es scheint nicht zu funktionieren.

sale.price <- function(price) { 
    if (CM.sample$Sales > 0) { 
    return(CM.sample$Sales/CM.sample$Product.Quantity.Purchased) 
    } else { 
    return("") 
    } 
} 

sale.price <- as.numeric(sapply(sale.price, price)) 

Dies ist ein Beispiel für meine Daten.

Product Sales Order.Quantity Price 
P1   120   2 
P2   45   1 
P3     
P4   25   2 
P5 
P6   180   3 

Idealerweise möchte ich das Endergebnis so aussehen.

Product Sales Order.Quantity Price 
P1   120   2   60 
P2   45   1   45 
P3         
P4   25   2   12.5 
P5 
P6   180   3   60 
+1

Sie einige Probleme haben, aber es wird viel einfacher sein, Ihnen zu zeigen, wie sie beheben, wenn Sie Ihre Daten zur Verfügung stellen 'dput' verwenden. Einfügen in Ihre Frage die Ausgabe von 'dput (CM.sample [1: 6,])' – eipi10

+0

Vielen Dank für Ihre Antwort @ eipi10, habe ich versucht Ausgabe mit 'dput' aber die Ausgabe sehr groß und nicht lesbar. Der data.frame ist ziemlich groß und einige Spalten enthalten große Arrays enthalten Strings von Text, weshalb es möglicherweise nicht funktioniert? – Davis

Antwort

0

Was:

# Initialize with "" 
CM.sample$Price <- "" 
# Calculate for rows with quantites 
CM.sample$Price[as.numeric(as.character(CM.sample$Sales)) > 0] <- CM.sample$Sales/CM.sample$Product.Quantity.Purchased 
+0

Es sieht so aus, als hätte 'Sales' leere Zeichenfolgen (' "" oder "' ''), in denen die Werte fehlen. Wenn dies der Fall ist, dann wird "Verkauf" als ein Zeichen oder ein Faktor codiert, und die Division führt entweder zu einem Fehler oder zu allen "NA" plus einer Warnung. – eipi10

+0

Danke @ eipi10 für diesen relevanten Kommentar! Sollte nun funktionieren – HubertL

+0

Danke @HubertL, eipi10 ist korrekt, leere Zeichenfolgen enthalten '" "' was ist, wo mein Problem liegt, da ich nicht sicher bin, wie ich mit dem Fehler umgehen soll. Ich habe Ihren Code ausprobiert, aber ich habe 'NA' für Felder wiederbelebt, die Werte für' Sales' und/oder 'Order.Quantity' enthalten, die leeren Strings blieben leer, was gut ist. – Davis