R 如何将天分组为周?

R 如何将天分组为周?,r,date,R,Date,在R中,如何关联日期(天)和周的向量 编辑:“周”应该是日期范围内的周索引,而不是年份内的周索引。我为我的模棱两可道歉 strftime是你的朋友 ? strftime # to see the help and the format set.seed(1) dates <- Sys.Date() + sample(1:365, size = 10) R> dates [1] "2012-02-11" "2012-03-21" "2012-06-01" "2012-09-30"

在R中,如何关联日期(天)和周的向量


编辑:“周”应该是日期范围内的周索引,而不是年份内的周索引。我为我的模棱两可道歉

strftime是你的朋友

? strftime # to see the help and the format

set.seed(1)
dates <- Sys.Date() + sample(1:365, size = 10)

R> dates
 [1] "2012-02-11" "2012-03-21" "2012-06-01" "2012-09-30"
 [5] "2012-01-18" "2012-09-25" "2012-10-11" "2012-06-30"
 [9] "2012-06-18" "2011-11-28"

# %j for julian day - number of the day since the 1st of january each year

R> strftime(dates, format = "%j") # or format(dates, format = "%j")
 [1] "042" "081" "153" "274" "018" "269" "285" "182" "170" "332"

R> strftime(dates, format = "%w")
 [1] "6" "3" "5" "0" "3" "2" "4" "6" "1" "1"

# my locale is in French so...
R> strftime(dates, format = "%A")
 [1] "samedi"   "mercredi" "vendredi" "dimanche" "mercredi"
 [6] "mardi"    "jeudi"    "samedi"   "lundi"    "lundi" 
?strftime#查看帮助和格式
种子(1)
日期
[1] "2012-02-11" "2012-03-21" "2012-06-01" "2012-09-30"
[5] "2012-01-18" "2012-09-25" "2012-10-11" "2012-06-30"
[9] "2012-06-18" "2011-11-28"
#%j代表朱利安节-自每年1月1日起的一天数
R> strftime(日期,格式=“%j”)#或格式(日期,格式=“%j”)
[1] "042" "081" "153" "274" "018" "269" "285" "182" "170" "332"
R> strftime(日期,格式=“%w”)
[1] "6" "3" "5" "0" "3" "2" "4" "6" "1" "1"
#我的语言是法语,所以。。。
R> strftime(日期,格式=“%A”)
[1] “samedi”“mercredi”“vendredi”“dimanche”“mercredi”
[6] “mardi”“jeudi”“samedi”“lundi”“lundi”

顺便问一下,你所说的天,月内的天,周还是年是什么意思

对于每个日期,使用
%W
格式占位符的
%U
通过
format()
对其进行格式化,以获取该日期所属的一年中的一周
%U
将星期日视为一周的第一天,而
%W
将星期一视为一周的第一天。以下是一个例子:

now <- as.Date(Sys.time())
dates <- seq(now, now + 25, by = "1 day") 

dat <- data.frame(Dates = dates, Week = format(dates, format = "%W"))
head(dat, 10)
虽然您的问题不清楚您到底想做什么,但匹配此日期向量的方法(我的数据框
dat
如上)是通过
merge()
。假设我们有一个要匹配的周向量,以及数据帧中的一些相关数据
weekdat

weekdat <- data.frame(Week = 44:50, Price = c(10, 20, 25, 30, 20, 15, 10))

还有其他方法可以将日期与周进行匹配或链接,但上面的内容应该会给您一些工作依据。

您是否只想知道自第一次记录以来完成的7天间隔的数量

dvec <- as.Date("2001-04-01")+0:90
dweek <- as.numeric(dvec-dvec[1]) %/% 7
dweek[1:21]
# [1] 0 0 0 0 0 0 0 1 1 1 1 1 1 1 2 2 2 2 2 2 2

dvec查看一下包装
lubridate
,它使处理日期变得非常简单。例如,
week(x)
将返回日期x的周数。-1重新编辑-因此,如果你不提前告诉我们,我们怎么可能知道你自己的个人周索引是什么?@GavinSimpson-你是对的。我本应该更清楚的。@GavinSimpson:我也“+()-ed”了你的,因为是你的努力提供了推断的基础。(我现在在键入“@Gavin.Neat”时弹出一个“Gavin Simpson”)你一定喜欢整数除法函数
%/%
-如果可以的话,我会再加一个+1-答案真的非常简洁明了。这也适用于datetime(POSIXct)对象,但它以秒为单位,所以你需要使用
%/%(7*24*60*60)
Huh…所以对于日期向量,这比Gavin的方法快30倍左右。加文的方法对POSIXlt的效果相对较好(仅慢7倍)。对于POSIXct向量,这种方法只稍微慢一点,然而,Gavin的方法慢了690倍。不确定是否有其他日期时间存储机制。很遗憾,因为Gavin的方法更有用-它返回一年中的一周,而不是从开始日期算起的一周..您可以计算一次开始的一周,然后将结果相加。
> merge(dat, weekdat)
   Week      Dates Price
1    44 2011-11-06    10
2    45 2011-11-07    20
3    45 2011-11-08    20
4    45 2011-11-09    20
5    45 2011-11-10    20
6    45 2011-11-11    20
7    45 2011-11-12    20
8    45 2011-11-13    20
9    46 2011-11-14    25
10   46 2011-11-15    25
11   46 2011-11-16    25
12   46 2011-11-17    25
13   46 2011-11-18    25
14   46 2011-11-19    25
15   46 2011-11-20    25
16   47 2011-11-21    30
17   47 2011-11-22    30
18   47 2011-11-23    30
19   47 2011-11-24    30
20   47 2011-11-25    30
21   47 2011-11-26    30
22   47 2011-11-27    30
23   48 2011-11-28    20
24   48 2011-11-29    20
25   48 2011-11-30    20
26   48 2011-12-01    20
dvec <- as.Date("2001-04-01")+0:90
dweek <- as.numeric(dvec-dvec[1]) %/% 7
dweek[1:21]
# [1] 0 0 0 0 0 0 0 1 1 1 1 1 1 1 2 2 2 2 2 2 2