我想创建一个新的colume来表示同一周的哪个日期。
data.table DATE_SET包含日期信息,如:
DATA_SET<- data.table(transday = seq(from = (Sys.Date()-64), to = Sys.Date(), by = 1))
例如,'2017-03-01'和'2017-03-02'在同一周,'2017-03-01'和'2017-03-08'都在星期三,但它们不在同一周。
如果“2016-01-01”是2016年的第一周,“2017-01-01”是2017年的第一周,价值为1,但它们不在同一周。所以我希望这个独特的价值能够“同一周”。
答案 0 :(得分:3)
这个问题的答案很大程度上取决于
从以下示例中可以看到一系列不同的选项:
dates isoweek day week_iso week_US week_UK DT_week DT_iso lub_week lub_iso cut.Date
2015-12-25 2015-W52 5 2015-W52 51 51 52 52 52 52 2015-12-21
2015-12-26 2015-W52 6 2015-W52 51 51 52 52 52 52 2015-12-21
2015-12-27 2015-W52 7 2015-W52 52 51 52 52 52 52 2015-12-21
2015-12-28 2015-W53 1 2015-W53 52 52 52 53 52 53 2015-12-28
2015-12-29 2015-W53 2 2015-W53 52 52 52 53 52 53 2015-12-28
2015-12-30 2015-W53 3 2015-W53 52 52 53 53 52 53 2015-12-28
2015-12-31 2015-W53 4 2015-W53 52 52 53 53 53 53 2015-12-28
2016-01-01 2015-W53 5 2015-W53 00 00 1 53 1 53 2015-12-28
2016-01-02 2015-W53 6 2015-W53 00 00 1 53 1 53 2015-12-28
2016-01-03 2015-W53 7 2015-W53 01 00 1 53 1 53 2015-12-28
2016-01-04 2016-W01 1 2016-W01 01 01 1 1 1 1 2016-01-04
2016-01-05 2016-W01 2 2016-W01 01 01 1 1 1 1 2016-01-04
2016-01-06 2016-W01 3 2016-W01 01 01 1 1 1 1 2016-01-04
2016-01-07 2016-W01 4 2016-W01 01 01 2 1 1 1 2016-01-04
2016-01-08 2016-W01 5 2016-W01 01 01 2 1 2 1 2016-01-04
由此代码创建:
library(data.table)
dates <- as.Date("2016-01-01") + (-7:7)
print(data.table(
dates,
isoweek = ISOweek::ISOweek(dates),
day = ISOweek::ISOweekday(dates),
week_iso = format(dates, "%G-W%V"),
week_US = format(dates, "%U"),
week_UK = format(dates, "%W"),
DT_week = data.table::week(dates),
DT_iso = data.table::isoweek(dates),
lub_week = lubridate::week(dates),
lub_iso = lubridate::isoweek(dates),
cut.Date = cut.Date(dates, "week")
), row.names = FALSE)
某些列中使用的格式YYYY-Www
是ISO 8601 week formats之一。它包括根据OP要求区分不同年份不同周的所需的年份。
ISO周定义是唯一一种确保每周总共包含7天的格式,也适用于新年。其他定义可能以“周”开始或结束,少于7天。由于年度的无缝分配, ISO周编号年与传统的公历年略有不同,例如,2016-01-01
属于2015年的最后一个ISO周53({ {1}})。
根据建议here,2015-W53
可能是OP的最佳选择。
披露:我是cut.Date()
软件包的维护者,该软件包是在ISOweek
无法识别strptime()
和{{1}时发布的在Windows版本的R中输出的格式规范。(现在仍然无法在输入中识别它们。)
答案 1 :(得分:1)
您可以使用R。
中week()
包的lubridate
功能
library(lubridate)
DATA_SET$week <- week(DATA_SET$transday)
这会为您提供一个新列week
。同一周内的日期将具有相同的周数。