2017-10-15 10 views
-1

J'espère que je suis capable de m'expliquer bien et ne pose pas une question en double.J'applique if function à chaque ligne d'une colonne dans r comme dans excel

J'ai un fichier CSV dans lequel il y a une colonne de ventes. Dans cette colonne, je veux appliquer une fonction logique comme si pour que chaque ligne de cette colonne soit évaluée et renvoie la valeur maximale des lignes sélectionnées. Je suis nouveau à r fait tout mon travail dans Excel, donc j'ai des difficultés.

Price Price Events Units  Sales  Sales/Event Returned Price 
2.31 1    737  1702  1702 
2.33 1    928  2162  2162   2.33 
2.36 2    1660  3918  1959 
2.42 1    861  2084  2084 

dans la colonne Ventes par événement que je veux appliquer une fonction dans laquelle, si (et (Sales_Per_Event $ 2> Sales_Per_Event $ 1, Sales_Per_Event $ 2> Sales_Per_Event $ 3, Prix 2 $ ""))

+0

Veuillez ne pas publier de données en tant qu'images, éditez votre question et publiez la sortie de 'dput (Sales_Per_Event)'. –

+0

L'inclusion d'un [exemple reproductible minimal] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) dans votre question augmentera vos chances d'obtenir une réponse. – jsb

+0

Pourquoi return_price n'a qu'une valeur? –

Répondre

0

Je crois J'ai finalement compris votre question. Si ce n'est pas juste le dire.
D'abord, les données.

dat <- 
structure(list(Price = c(2.31, 2.33, 2.36, 2.42), Price_Events = c(1L, 
1L, 2L, 1L), Units = c(737L, 928L, 1660L, 861L), Sales = c(1702L, 
2162L, 3918L, 2084L), Sales_per_Event = c(1702L, 2162L, 1959L, 
2084L)), .Names = c("Price", "Price_Events", "Units", "Sales", 
"Sales_per_Event"), class = "data.frame", row.names = c(NA, -4L 
)) 

Maintenant, le code.

# 
# Input x - Sales_per_Event 
#   y - Price 
# Returns z - Returned_Price 
# 
abhik <- function(x, y){ 
    n <- length(x) 
    z <- numeric(n) 
    z[1] <- NA 
    z[n] <- NA 
    for(i in seq_along(x)[-c(1, n)]){ 
     if(x[i] > x[i - 1] && x[i] > x[i + 1]) 
      z[i] <- y[i] 
     else 
      z[i] <- NA 
    } 
    z 
} 

abhik(dat$Sales_per_Event, dat$Price) 
#[1] NA 2.33 NA NA 

dat$Returned_Price <- abhik(dat$Sales_per_Event, dat$Price) 
dat 

Notez que j'ai opté pour NA au lieu de valeurs de caractères en blanc, car blancs transformeraient votre colonne entière en caractère ou, pire, les facteurs.

+0

Merci beaucoup son fonctionnement, vraiment l'apprécier. Juste besoin de comprendre la fonction moi-même maintenant. –

+0

Entrez 'dat $ Sales_per_Event' comme' x' et 'dat $ Price' comme' y'. Il renvoie la nouvelle colonne, 'dat $ Returned_Price'. Peut-être que je devrais écrire cela dans la réponse? –

+0

ya du sens à moi maintenant :) –