如何在R中找到最近的一周

时间:2014-11-19 21:14:34

标签: r date date-arithmetic

我希望通过引用一系列名为“周'周”的周来找到df $ Upload_Date中每个日期最近的最低周。

head(df$Upload_Date)
#[1] "2014-09-25" "2014-09-25" "2014-09-25" "2014-11-06" "2014-09-25" "2014-09-25"

我还有一份我将在报告中使用的周列表。

> weeks
 [1] "2014-08-01" "2014-08-08" "2014-08-15" "2014-08-22" "2014-08-29" "2014-09-05" "2014-09-12" "2014-09-19" "2014-09-26"
[10] "2014-10-03" "2014-10-10" "2014-10-17" "2014-10-24" "2014-10-31" "2014-11-07" "2014-11-14"

df $ Upload_Date中的第一个值是" 2014-09-25。距离最近的一周#34;周"是" 2014-09-19"。所以我想创建一个名为" df $ report_week"的新列。这将指定" 2014-09-19"对于" 2014-09-25"。

的行

我尝试过设置以下变量(不确定这是否有用):

upload_day <- as.POSIXlt(df$Upload_Date[1])$yday
> upload_day
[1] 267

report_days <- as.POSIXlt(weeks)$yday
> report_days
 [1] 212 219 226 233 240 247 254 261 268 275 282 289 296 303 310 317

这里有什么想法吗?

3 个答案:

答案 0 :(得分:3)

您可以尝试cut并使用您的&#34;周&#34;向量为breaks

date <- as.Date(c("2014-09-25", "2014-10-06"))
weeks <- as.Date("2014-08-01") + 7 * 0:10

cut(date, breaks = weeks)
# [1] 2014-09-19 2014-10-03

还要注意内置的&#39; breaks "weeks",周数从星期一开始(默认为start.on.monday = TRUE),与周五周开始相比,&#39;:

cut(date, breaks = "week")
# [1] 2014-09-22 2014-10-06

答案 1 :(得分:3)

您可以使用findInterval。看起来您正在尝试查找上传日期的一周,其中几周是上周五。

data.frame(date=Upload_Date,week.of=weeks[findInterval(Upload_Date, weeks)])
        date    week.of
1 2014-09-25 2014-09-19
2 2014-11-06 2014-10-31

答案 2 :(得分:0)

您可以使用floor_date()中的lubridate。例如,floor_date(x, unit = "week")。使用cut的其他答案对于一般情况非常好,在这种情况下,你有几周(或其他任何时间间隔)的方便向量。这适用于大多数标准单位,选项为c("second", "minute", "hour", "day", "week", "month", "year")