工作日()函数中的NA

时间:2019-10-30 03:43:25

标签: r

我正在处理一些日期,需要将实际日期转换为星期几。我正在使用weekdays()函数,并且超过13天的任何一天都在生成NA

example<-c("1/1/2000","1/3/2000","1/13/2000","1/15/2000","2/3/2000","2/8/2000","2/29/2000")

example<-weekdays(as.Date(example))

example
#[1] "Saturday"  "Tuesday"   NA          NA          "Wednesday" "Tuesday"  
#[7] NA         

无论哪个月或一年,第13号下的每一天都会产生正确的输出,但是13号下的每一天都不会产生正确的输出。

3 个答案:

答案 0 :(得分:2)

只需为format指定as.Date

example<-c("1/1/2000","1/3/2000","1/13/2000","1/15/2000","2/3/2000","2/8/2000","2/29/2000")

weekdays(as.Date(example, format = "%m/%d/%Y"))
#[1] "Saturday" "Monday"   "Thursday" "Saturday" "Thursday" "Tuesday"  "Tuesday"

as.Date实际上试图猜测格式;看看tryFormats时,您会看到不同的"%Y-%m-%d""%Y/%m/%d"?as.Date)。


一种无忧无虑的替代方法是使用anytime

library(anytime)
weekdays(anydate(example))
#[1] "Saturday" "Monday"   "Thursday" "Saturday" "Thursday" "Tuesday"  "Tuesday"

答案 1 :(得分:0)

总的猜想没有看并且血液中的咖啡因不足...您的日期布局预期为DD / MM / YYYY,因此对于MM> 12的任何内容都会被拒绝。

我认为您可以指定实际的输入日期格式,但是再次输入足够的咖啡。

答案 2 :(得分:0)

我喜欢使用lubridate导入日期,它比format中的as.Date参数更容易记住

这里您显然有月份/日期/年,要获得适当的润滑功能,只需保留月份/日期/年的首字母:mdy

library(lubridate)
example_dates <- mdy(example)
weekdays(example_dates)
#[1] "Saturday" "Monday"   "Thursday" "Saturday" "Thursday" "Tuesday"  "Tuesday"