我正在尝试创建一个将输入字符串的函数" mm / did / yyyy"并以月,日和年的数字形式返回输出向量。我基本上想要将这个新函数与下面创建的weekday()函数结合起来,最终返回输入字符串对应的星期几。
weekday<-function(q,r,s)
{ (if(q>= 3)
m<-(q-2)
else
m<-(q+10))
k<-r
c<-floor(s/100)
(if(q>=3)
y<-s%%100
else
y<-(s%%100)-1)
f<-(floor((2.6*m)-0.2)+k+y+floor(y/4)+floor(c/4)-(2*c))%%7
if(f==0){return("Sunday")}
else
if(f==1){return("Monday")}
else
if(f==2){return("Tuesday")}
else
if(f==3){return("Wednesday")}
else
if(f==4){return("Thursday")}
else
if(f==5){return("Friday")}
else
if(f==6){return("Saturday")}}
我尝试使用类型为.convert的东西,但这并不能产生所需的输出。任何帮助都会非常感谢!
dateconvert<-function("q/r/s")
{
type.convert(dateconvert(), na.strings = )
weekday(convertedanswer)
Return (weekday)
}
答案 0 :(得分:1)
Lubridate包非常适合这个!您可以使用lubridate::mdy()
转换您提到的“mm / dd / yyyy”格式中的日期,然后使用lubridate::week()
来获取该周。
lubridate::week(lubridate::mdy("10/05/2017"))
#> 5
如果你想要这一天,而不是数字输出,你可以使用
lubridate::wday(lubridate::mdy("10/05/2017"),
label = TRUE)
#> [1] Thurs
答案 1 :(得分:1)
你有没有试过rubridate包?
input <- "12/30/2017"
# change into as.date format
inputdate <- strptime(input, "%m/%d/%Y")
library("lubridate")
day(inputdate)
# [1] 30
month(inputdate)
# [1] 12
year(inputdate)
# [1] 2017
这似乎是一种迂回的方式来达到一周的日子。你应该尝试使用lubridate包附带的wday()。
wday(inputdate, label=T)
# [1] Sat
# Levels: Sun < Mon < Tues < Wed < Thurs < Fri < Sat.
# as a Ordered factor (Sunday is first)
wday(inputdate)
# [1] 7
# wday returns the day of the week as a decimal number (01-07, Sunday is 1) or an .
答案 2 :(得分:1)
或者没有包裹:
date = "06/10/2017"
POSIXdate = as.POSIXlt(date, format = "%d/%m/%Y")
strftime(POSIXdate, "%A")
#Friday
# Or if you like one-liner
strftime(as.POSIXlt("dd/mm/yyyy", format= "%d/%m/%Y"), "%A")