8

日付のベクトルが与えられた場合(複数年にわたる可能性があります):

exampleDates = as.Date( 1 : 15, origin = as.Date( "2012-12-25" ) )

日付を週にグループ化する識別子を生成したいと思います。したがって、日曜日に始まるカレンダーを想定すると、次のようになります。

  • 26日から29日は同じ識別子を生成します
  • 30日から5日までは同じIDです
  • 6番目から9番目までは同じIDを持っています

これが欠陥のある試みです:

strftime( exampleDates , format = "%Y%W" )

31日と1日は異なる週と見なされます(当然のことです)。strftime日付を週ごとにグループ化するために使用できる識別子(文字、数値など)を生成するものに似たものを探しています。

すでにいくつかの巧妙な機能があると確信しています。

4

2 に答える 2

10

これにより、特定の週に含まれる日付のグループに一意の整数が割り当てられます。

origin <- as.Date("2012-12-9")  ## A Sunday
weekID <- as.numeric(exampleDates - origin) %/% 7

data.frame(date = exampleDates,
           weekday = weekdays(exampleDates),
           week = weekID)
#          date   weekday week
# 1  2012-12-26 Wednesday    2
# 2  2012-12-27  Thursday    2
# 3  2012-12-28    Friday    2
# 4  2012-12-29  Saturday    2
# 5  2012-12-30    Sunday    3
# 6  2012-12-31    Monday    3
# 7  2013-01-01   Tuesday    3
# 8  2013-01-02 Wednesday    3
# 9  2013-01-03  Thursday    3
# 10 2013-01-04    Friday    3
# 11 2013-01-05  Saturday    3
# 12 2013-01-06    Sunday    4
# 13 2013-01-07    Monday    4
# 14 2013-01-08   Tuesday    4
# 15 2013-01-09 Wednesday    4
于 2012-12-12T17:26:19.927 に答える
4

difftimeを使用して、

floor(difftime(  exampleDates,as.Date( "2012-12-16" ), units = "week"))

time differences in weeks
 [1] 1 2 2 2 2 2 2 2 3 3 3 3 3 3 3
于 2012-12-12T17:32:36.637 に答える