我经常需要一个包含星期几的向量,但我总是把它打出来:
days.of.week <- c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")
这很容易,因为它很短,但总是有错别字的可能性。有没有办法以编程方式创建一个包含星期几的向量?
我经常需要一个包含星期几的向量,但我总是把它打出来:
days.of.week <- c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")
这很容易,因为它很短,但总是有错别字的可能性。有没有办法以编程方式创建一个包含星期几的向量?
一种可能:
days.of.week <- weekdays(Sys.Date()+0:6)
总是从星期一开始:
days.of.week <- weekdays(as.Date(4,"1970-01-01",tz="GMT")+0:6)
或者您可以按照自己的方式定义它,但是在您的.Rprofile
, 所以它在启动时总是可用的。
你去吧,工作日的向量“星期一”,...,“星期日”:
days.of.week <- weekdays(x=as.Date(seq(7), origin="1950-01-01"))
虽然基于函数的答案很巧妙,但 Joshua 的最后一条评论很到位。如果你有一个经常使用的变量,要么在你的变量中创建它,要么从文件中.Rprofile
加载它,使用类似 ..Rdata
.Rprofile
load('daysofweek.rdata')
请注意,更改一周的第一天就像
neworder <- days.of.week[c(2:7,1)]
另一种方法是使用weekdays
with ISOdate
:
weekdays(ISOdate(1, 1, 1:7))
#[1] "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" "Sunday"
Sys.setlocale
并且可以使用其他语言来获取它。
Sys.setlocale("LC_TIME", "de_DE.UTF-8")
#[1] "de_DE.UTF-8"
weekdays(ISOdate(1, 1, 1:7))
#[1] "Montag" "Dienstag" "Mittwoch" "Donnerstag" "Freitag" "Samstag" "Sonntag"
也可以使用format
format(ISOdate(1, 1, 1:7), "%A")
#[1] "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" "Sunday"
或获取缩写的工作日名称
format(ISOdate(1, 1, 1:7), "%a")
#weekdays(ISOdate(1, 1, 1:7), TRUE) #Alternative
#[1] "Mon" "Tue" "Wed" "Thu" "Fri" "Sat" "Sun"
根据今天的日期,我们还可以找到一周中的几天
weekdays(as.Date(seq(7),origin=Sys.Date() - as.POSIXlt(Sys.Date())$wday ))
[1] "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"
[7] "Sunday"