在用户定义的函数R

时间:2017-10-06 02:45:53

标签: r

我正在尝试创建一个将输入字符串的函数" 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)


 }

3 个答案:

答案 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")