我希望通过引用一系列名为“周'周”的周来找到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
这里有什么想法吗?
答案 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")
。