R 约会以星期五结束

R 约会以星期五结束,r,R,我有这个数据框: dat = data.frame(date = as.Date(c("2016-12-01","2016-12-02","2016-12-03","2016-12-04", "2016-12-05","2016-12-06","2016-12-07","2016-12-08", "2016-12-09","2016-12-10","2016-1

我有这个数据框:

dat = data.frame(date = as.Date(c("2016-12-01","2016-12-02","2016-12-03","2016-12-04",
                                  "2016-12-05","2016-12-06","2016-12-07","2016-12-08",
                                  "2016-12-09","2016-12-10","2016-12-11","2016-12-12",
                                  "2016-12-13","2016-12-14","2016-12-15")))

> dat
         date
1  2016-12-01
2  2016-12-02
3  2016-12-03
4  2016-12-04
5  2016-12-05
6  2016-12-06
7  2016-12-07
8  2016-12-08
9  2016-12-09
10 2016-12-10
11 2016-12-11
12 2016-12-12
13 2016-12-13
14 2016-12-14
15 2016-12-15
我想添加一个列,该列是周五结束的一周,因此结果将是

         date  new column
1  2016-12-01      2016-12-02
2  2016-12-02       2016-12-02
3  2016-12-03       2016-12-09
4  2016-12-04       2016-12-09
5  2016-12-05       2016-12-09
6  2016-12-06       2016-12-09
7  2016-12-07       2016-12-09
8  2016-12-08       2016-12-09
9  2016-12-09       2016-12-09
10 2016-12-10       2016-12-16
11 2016-12-11       2016-12-16
12 2016-12-12       2016-12-16
13 2016-12-13       2016-12-16
14 2016-12-14       2016-12-16
15 2016-12-15       2016-12-16

等等……这样做的最佳方式是什么?

一个带有基本R的解决方案:

dat$friday <- dat$date - (as.integer(format(dat$date, '%w')) - 5)
说明:

  • 使用
    格式(dat$date,'%w')
    可以从
    日期
    -列中提取工作日编号
  • 将其转换为整数并减去
    5
    (星期五的工作日数)
  • 将结果从日期中减去,得到该周的星期五

可能需要研究这个问题和libridate包。您也可以使用日期
$wday
部分
POSIXlt
,请看这里,它几乎是重复的。@DirkEddelbuettel thx,现在作为重复关闭它不是100%覆盖(或者我已经做了),但我也有同感——谢谢。什么不是100%覆盖?
> dat
         date     friday
1  2016-12-01 2016-12-02
2  2016-12-02 2016-12-02
3  2016-12-03 2016-12-02
4  2016-12-04 2016-12-09
5  2016-12-05 2016-12-09
6  2016-12-06 2016-12-09
7  2016-12-07 2016-12-09
8  2016-12-08 2016-12-09
9  2016-12-09 2016-12-09
10 2016-12-10 2016-12-09
11 2016-12-11 2016-12-16
12 2016-12-12 2016-12-16
13 2016-12-13 2016-12-16
14 2016-12-14 2016-12-16
15 2016-12-15 2016-12-16