if语句存在语法错误

时间:2019-03-24 17:21:57

标签: r

我有以下问题:

在导入的数据框中,我需要创建一个名为“ profit_margin_flag”的新列,其值计算如下[利润率=利润/销售额]。

a。如果利润率为负,则新列的值应为“负”。

b。如果利润率为正且小于10%,则新列的值应为“低利润”。

c。如果利润率为10%或更高,但小于25%,则新列的值应为“标准利润”。

d。如果利润率为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] <-“标准保证金”}       否则if(orders $ profit_margin_flag [i]> = .50)       错误:“其他”中出现意外的“其他”         {orders $ profit_margin_flag [i] <-“高利润”}   }   错误:“}”中意外的“}”

1 个答案:

答案 0 :(得分:0)

正如@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