Наличие синтаксических ошибок с операторами if - PullRequest
0 голосов
/ 24 марта 2019

У меня следующий вопрос:

В импортированном фрейме данных мне нужно создать новый столбец с именем «profit_margin_flag», значение которого вычисляется следующим образом: [маржа прибыли = прибыль / продажи].

a.Если маржа прибыли отрицательная, новый столбец должен иметь значение «минус».

b. Если маржа прибыли положительная и меньше 10%, новый столбец долженимеет значение «низкая маржа».

c. Если размер прибыли 10% или более, но менее 25%, новый столбец должен иметь значение «стандартная маржа».

Если маржа прибыли составляет 50% или более, новый столбец должен иметь значение «высокая маржа».

Я закодировал это:

orders$profit_margin_flag <- orders$Profit/orders$Sales
n <- nrow(orders)
`for (i in (1:n))`
{
if(orders$profit_margin_flag[i] < 0)
{orders$profit_margin_flag[i] <- "negative"}
  else if(orders$profit_margin_flag[i] >0 && <.10)
    {orders$profit_margin_flag[i]<- "low margin"}
else if(orders$profit_margin_flag[i] >= .10 && < .25)
  {orders$profit_margin_flag[i]<- "standard margin"}
 else if(orders$profit_margin_flag[i] >= .50) 
   {orders$profit_margin_flag[i]<- "high margin"}
}

Я получаю эту ошибку:

else if(orders$profit_margin_flag[i] >0 && <.10)
#Error: unexpected 'else' in "  else"
#     {
+      orders$profit_margin_flag[i]<- "low margin"
+   }

else if(orders$profit_margin_flag[i] >= .10 && < .25)
Error: unexpected 'else' in "else"

{orders $ profit_margin_flag [i] <- "стандартная маржа"} else if (orders $ profit_margin_flag [i]> = .50) Ошибка: неожиданное 'else' в "else" {orders$ profit_margin_flag [i] <- "high margin"}} Ошибка: неожиданное '}' в "}" </p>

1 Ответ

0 голосов
/ 24 марта 2019

Как указал @mickey, && < .10 не является допустимым синтаксисом.

При этом вы хотите заменить значение profit_margin_flag на "отрицательное" и т. Д. (Как вы указали вOP) или вы хотите, чтобы он был назначен новой переменной?

Я немного очистил ваш код (флаг был назначен новой переменной profit_margin_flag и значения полей, изначально сохраненные в profit_margin) и это должно сработать.

orders <- data.frame(profit_margin = c(-2, 0.07, 0.14, 11), profit_margin_flag = rep_len(NA, 4))

for(i in 1:nrow(orders)){
 +   if(orders$profit_margin[i] < 0){
 +     orders$profit_margin_flag[i] <- "negative"
 +   }
 +   else if(orders$profit_margin[i] > 0 && orders$profit_margin[i] < 0.10){
 +     orders$profit_margin_flag[i]<- "low margin"
 +   }
 +   else if(orders$profit_margin[i] >= 0.10 && orders$profit_margin[i] < 0.25)
 +   {
 +     orders$profit_margin_flag[i]<- "standard margin"
 +   }
 +   else if(orders$profit_margin[i] >= 0.50) 
 +   {
 +     orders$profit_margin_flag[i]<- "high margin"
 +   }
 + }

orders
#   profit_margin profit_margin_flag
# 1         -2.00           negative
# 2          0.07         low margin
# 3          0.14    standard margin
# 4         11.00        high margin
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...