条件逻辑和循环

时间:2018-03-10 18:05:45

标签: r

我正在尝试创建一个条件循环来创建一个名为BigSales的新变量,该变量的值应为' yes'如果日期发生在2012年之前,或者当天的总毛利超过6500万美元。否则,它应该被赋予“不”的值。

我试过了:

  for(i in 1:45){
      if(movies$Gross[i] > 65 | movies$Date[i] < 2012-01-01){
        movies$BigSales[i] <- "yes"}
      else (
        movies$BigSales[i] <- "no"
      )
    }

但是我收到了错误消息:

Error in if (movies$Gross[i] > 65 | movies$Date[i] < 2012 - 1 - 1) { : 
  missing value where TRUE/FALSE needed

除此之外,数据集包含100个观察结果,但只有45个。我该如何解决?

2 个答案:

答案 0 :(得分:0)

可以在这个问题上添加条件列,但是有一些工具可以使这更容易和更易于理解。

library(plyr)
library(dplyr)
movies <- mutate(movies, BigSales = ifelse(Gross > 65 && Date < "2012-01-01","yes","no"))

您还应该小心处理日期 - 致电str(movies$Date)以确保日期&#34;日期&#34;类型,如果不是,则应将其传递给as.Date

要按照您的提问回答您的问题,您没有在列出的日期前加上引号,因此它尝试将其评估为2012 - 2。如果您希望使用自己的代码解决此问题,请使用"2012-01-01"

答案 1 :(得分:0)

ifelse是矢量化的,这意味着它从输入向量中获取每个项目,处理条件并返回向量。

另一点是,由于OP提到2012之前的日期将被视为BigSales“是”。因此,只检查year的{​​{1}}就行了。

在基础R中,解决方案可能在

movies$Date

注意:movies$BigSales <- ifelse(movies$Gross > 65 | as.numeric(format(movies$Date,"%Y")) < 2012, "yes", "no") 类型为movies$DateDate