我正在尝试创建一个条件循环来创建一个名为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个。我该如何解决?
答案 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$Date
或Date