提问人:ATMathew 提问时间:2/10/2012 最后编辑:HenrikATMathew 更新时间:7/8/2018 访问量:296724
查找星期几
Find the day of a week
问:
假设我在 R 中有一个日期,其格式如下。
date
2012-02-01
2012-02-01
2012-02-02
在 R 中是否有任何方法可以添加另一列与日期关联的星期几?数据集非常大,因此手动进行更改是没有意义的。
df = data.frame(date=c("2012-02-01", "2012-02-01", "2012-02-02"))
因此,在添加天数后,它最终将如下所示:
date day
2012-02-01 Wednesday
2012-02-01 Wednesday
2012-02-02 Thursday
这可能吗?任何人都可以向我指出一个允许我这样做的软件包吗? 只是尝试按日期自动生成日期。
答:
78赞
nograpes
2/10/2012
#1
㚧:?strftime
%A
当前区域设置中的完整工作日名称
df$day = strftime(df$date,'%A')
评论
21赞
Vlad Holubiev
12/16/2015
如果有人搜索工作日号码 - 使用而不是'%u'
'%A'
0赞
FLonLon
2/8/2021
如果您想要一周中的数字日期,请不要忘记使用原始的 Date 对象,而不是 strftime 结果,因为它是字符类型
97赞
Andrie
2/10/2012
#2
使用包和功能:lubridate
wday
library(lubridate)
df$date <- as.Date(df$date)
wday(df$date, label=TRUE)
[1] Wed Wed Thurs
Levels: Sun < Mon < Tues < Wed < Thurs < Fri < Sat
评论
14赞
bobfet1
5/7/2013
这种方法的好处是它返回天数作为因子,因此,如果您创建图表,天数将按正确的顺序排列。
3赞
stevec
4/21/2020
要获取每天的完整单词(例如,星期日而不是星期日):abbr = FALSE
14赞
Tyler Rinker
2/10/2012
#3
这应该可以解决问题
df = data.frame(date=c("2012-02-01", "2012-02-01", "2012-02-02"))
dow <- function(x) format(as.Date(x), "%A")
df$day <- dow(df$date)
df
#Returns:
date day
1 2012-02-01 Wednesday
2 2012-02-01 Wednesday
3 2012-02-02 Thursday
362赞
GSee
2/10/2012
#4
df = data.frame(date=c("2012-02-01", "2012-02-01", "2012-02-02"))
df$day <- weekdays(as.Date(df$date))
df
## date day
## 1 2012-02-01 Wednesday
## 2 2012-02-01 Wednesday
## 3 2012-02-02 Thursday
编辑:只是为了展示另一种方式......
对象的组成部分是数字工作日(从星期日开始的 0-6)。wday
POSIXlt
as.POSIXlt(df$date)$wday
## [1] 3 3 4
可用于对工作日名称的字符向量进行子集
c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday")[as.POSIXlt(df$date)$wday + 1]
## [1] "Wednesday" "Wednesday" "Thursday"
评论
3赞
Shambho
6/5/2014
+1 有没有办法像使用 ??weekdays
as.POSIXlt
3赞
GSee
6/5/2014
@Shambho我想你可以这样做:.如果你不喜欢这些名字,你可以把它包起来。setNames(0:6, c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"))[weekdays(as.Date(df$date))]
unname()
6赞
JStrahl
4/25/2015
要从日期开始获取工作日号码(0-6,周日-周六),您可以执行以下操作:format(as.日期(df$date),“%w”) 。有关格式代码的详细信息,请参阅 stat.berkeley.edu/~s133/dates.html
18赞
Peter Lustig
3/21/2014
#5
假设您还希望一周从星期一开始(而不是默认的星期日),那么以下内容会有所帮助:
require(lubridate)
df$day = ifelse(wday(df$time)==1,6,wday(df$time)-2)
结果是区间 [0,..,6] 内的天数。
如果希望间隔为 [1,..7],使用以下命令:
df$day = ifelse(wday(df$time)==1,7,wday(df$time)-1)
...或者,或者:
df$day = df$day + 1
评论
7赞
mrub
5/24/2018
您还可以使用参数:week_start
wday(df$date, label = TRUE, week_start = 1)
4赞
Qbik
5/9/2016
#6
JStrahl 的表单注释,我们得到当天的编号:format(as.Date(df$date),"%w")
as.numeric(format(as.Date("2016-05-09"),"%w"))
10赞
s_scolary
9/28/2017
#7
start = as.POSIXct("2017-09-01")
end = as.POSIXct("2017-09-06")
dat = data.frame(Date = seq.POSIXt(from = start,
to = end,
by = "DSTday"))
# see ?strptime for details of formats you can extract
# day of the week as numeric (Monday is 1)
dat$weekday1 = as.numeric(format(dat$Date, format = "%u"))
# abbreviated weekday name
dat$weekday2 = format(dat$Date, format = "%a")
# full weekday name
dat$weekday3 = format(dat$Date, format = "%A")
dat
# returns
Date weekday1 weekday2 weekday3
1 2017-09-01 5 Fri Friday
2 2017-09-02 6 Sat Saturday
3 2017-09-03 7 Sun Sunday
4 2017-09-04 1 Mon Monday
5 2017-09-05 2 Tue Tuesday
6 2017-09-06 3 Wed Wednesday
下一个:在 R 中更改日期格式
评论