首页 > 解决方案 > 如果缺少需要 TRUE/FALSE 的值 - 星期几作为数字

问题描述

我有以下代码将星期几标识为我的数据集中的数字:

sapply(weekdays(as.Date(date), abbreviate=TRUE), 
     function(x) if(x=="Sun") 1 else 
                 if(x=="Mon") 2 else 
                 if(x=="Tue") 3 else 
                 if(x=="Wed") 4 else 
                 if(x=="Thu") 5 else 
                 if(x=="Fri") 6 else 
                 if(x=="Sat") 7 else 0)
}

但是我遇到的问题是,当我尝试使用此公式应用它时,我的日期中必须有空格:

d$dow <- myweekday(d$DateTime)

R 抛出此错误:

if (x == "Sun") 1 else if (x == "Mon") 2 else if (x == "Tue") 3 else if (x == : 需要 TRUE/FALSE 的缺失值

请问我该如何进行?我试图在上面添加另一个 if 命令 (if X=="NA") 0 但这不起作用。

任何帮助,将不胜感激。

标签: rna

解决方案


你的代码看起来不错,除了最后的一个括号(复制粘贴错误?)你收到一个错误,因为你可能在输入中有一些丢失的数据;这给出了相同的错误消息

sapply(weekdays(c(Sys.time(), NA), abbreviate=TRUE), function(x) 
  if(x=="Sun") 1 else 
    if(x=="Mon") 2 else 
      if(x=="Tue") 3 else 
        if(x=="Wed") 4 else 
          if(x=="Thu") 5 else 
            if(x=="Fri") 6 else 
              if(x=="Sat") 7 else 0)

如果输入中有任何错误(NA 或与日期不匹配的内容),则 weekdays 函数会给出错误。您最好使用lubridate::wday()已经处理数字日期名称的函数:

library(lubridate)
wday(as.Date(date))
#### [1]  6 NA

然后,您可以用任何您想要的替换 NA。


推荐阅读