gpt4 book ai didi

R:将日期向下舍入到一周的第一天

转载 作者:行者123 更新时间:2023-12-04 10:34:58 25 4
gpt4 key购买 nike

我有一个数据框,其中一列包含日期(某些日期出现多次)。我想按周汇总日期。我能想到的最好方法是将日期四舍五入到最近的星期一。我该如何舍入日期?如何将此日期列表转换为周?

2016-04-04
2016-04-05
2016-04-06
2016-04-07
2016-04-08
2016-04-09
2016-04-10
2016-04-11
2016-04-12
2016-04-13
2016-04-14

预期输出应该是这样的:
2016-04-04
2016-04-04
2016-04-04
2016-04-04
2016-04-04
2016-04-04
2016-04-04
2016-04-11
2016-04-11
2016-04-11
2016-04-11

最佳答案

cut()来自基 R 的对象有两种方法 DatePOSIXt假设周默认从周一开始(但可以使用 start.on.monday = FALSE 更改为周日)。

dates <- c("2016-04-04", "2016-04-05", "2016-04-06", "2016-04-07", "2016-04-08", 
"2016-04-09", "2016-04-10", "2016-04-11", "2016-04-12", "2016-04-13",
"2016-04-14")
result <- data.frame(
dates,
cut_Date = cut(as.Date(dates), "week"),
cut_POSIXt = cut(as.POSIXct(dates), "week"),
stringsAsFactors = FALSE)

result
# dates cut_Date cut_POSIXt
#1 2016-04-04 2016-04-04 2016-04-04
#2 2016-04-05 2016-04-04 2016-04-04
#3 2016-04-06 2016-04-04 2016-04-04
#4 2016-04-07 2016-04-04 2016-04-04
#5 2016-04-08 2016-04-04 2016-04-04
#6 2016-04-09 2016-04-04 2016-04-04
#7 2016-04-10 2016-04-04 2016-04-04
#8 2016-04-11 2016-04-11 2016-04-11
#9 2016-04-12 2016-04-11 2016-04-11
#10 2016-04-13 2016-04-11 2016-04-11
#11 2016-04-14 2016-04-11 2016-04-11

请注意 cut()根据 OP 的要求返回非常适合聚合的因素:
str(result)
#'data.frame': 11 obs. of 3 variables:
# $ dates : chr "2016-04-04" "2016-04-05" "2016-04-06" "2016-04-07" ...
# $ cut_Date : Factor w/ 2 levels "2016-04-04","2016-04-11": 1 1 1 1 1 1 1 2 2 2 ...
# $ cut_POSIXt: Factor w/ 2 levels "2016-04-04","2016-04-11": 1 1 1 1 1 1 1 2 2 2 ...

但是,对于使用 ggplot2 绘制聚合值(如果有很多周可能会使轴困惑)最好从离散时间尺度切换到连续时间尺度。那么就要强制因子回 DatePOSIXct :
as.Date(as.character(result$cut_Date))
as.POSIXct(as.character(result$cut_Date))

关于R:将日期向下舍入到一周的第一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43813249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com