R为一系列数字指定周值

R为一系列数字指定周值,r,intervals,R,Intervals,我有一个如下所示的数据框: dataset <- data.frame(date = seq(from=as.Date("2015-07-06"), to=as.Date("2015-07-15"),by="day"), stringsAsFactors=F) date week 1: 2015-07-06 Week 1 2: 2015-07-07 W

我有一个如下所示的数据框:

dataset <- data.frame(date = seq(from=as.Date("2015-07-06"),
                                 to=as.Date("2015-07-15"),by="day"),
                      stringsAsFactors=F)
          date   week
 1: 2015-07-06 Week 1
 2: 2015-07-07 Week 1
 3: 2015-07-08 Week 1
 4: 2015-07-09 Week 1
 5: 2015-07-10 Week 1
 6: 2015-07-11 Week 2
 7: 2015-07-12 Week 2
 8: 2015-07-13 Week 2
 9: 2015-07-14 Week 2
10: 2015-07-15 Week 2
我的数据只是一周一天的数据,因此只有5天。每周从周一开始…只是为了给大家一些背景

除了数到前5周并分配“第一周”,然后数到下5周并分配“第二周”等等,还有什么方法可以做到这一点吗

我把这篇文章放在一个for循环中,所以我希望有一个严格的解决方案


多谢各位

以下是我对
lubridate
包的
week
功能的解决方案。注意,在传递到
week
函数列
date
之前,需要将
ymd
转换为POSIX类

library(lubridate)
dataset$date <- ymd(dataset$date)
dataset$week <- week(dataset$date)
dataset
         date week
1  2015-07-06   27
2  2015-07-07   27
3  2015-07-08   28
4  2015-07-09   28
5  2015-07-10   28
6  2015-07-11   28
7  2015-07-12   28
8  2015-07-13   28
9  2015-07-14   28
10 2015-07-15   29
库(lubridate)

dataset$date这是我的解决方案,它使用了
lubridate
包的
week
功能。注意,在传递到
week
函数列
date
之前,需要将
ymd
转换为POSIX类

library(lubridate)
dataset$date <- ymd(dataset$date)
dataset$week <- week(dataset$date)
dataset
         date week
1  2015-07-06   27
2  2015-07-07   27
3  2015-07-08   28
4  2015-07-09   28
5  2015-07-10   28
6  2015-07-11   28
7  2015-07-12   28
8  2015-07-13   28
9  2015-07-14   28
10 2015-07-15   29
库(lubridate)

数据集$date由于“日期”列只有周天数且没有任何中断,我们可以使用
gl/paste
创建周索引。这并不取决于数据集的
nrow
,即即使nrow不是5的倍数,它也可以工作

 dataset$week <- paste('Week', as.numeric(gl(nrow(dataset),5, nrow(dataset))))


但是,我不确定这是您想要的。

由于“日期”列只有周天数,并且没有任何休息,我们可以使用
gl/paste
创建周索引。这并不取决于数据集的
nrow
,即即使nrow不是5的倍数,它也可以工作

 dataset$week <- paste('Week', as.numeric(gl(nrow(dataset),5, nrow(dataset))))


但是,我不确定这是您想要的。

这里有一个使用
base R
的简单解决方案:

nweeks <- 10 #choose as required
days <- paste0("Week",rep(seq(nweeks),each=5))
#> days
# [1] "Week1"  "Week1"  "Week1"  "Week1"  "Week1"  "Week2"  "Week2"  "Week2"  "Week2"  "Week2"  "Week3"  "Week3"  "Week3"  "Week3"  "Week3" 
#[16] "Week4"  "Week4"  "Week4"  "Week4"  "Week4"  "Week5"  "Week5"  "Week5"  "Week5"  "Week5"  "Week6"  "Week6"  "Week6"  "Week6"  "Week6" 
#[31] "Week7"  "Week7"  "Week7"  "Week7"  "Week7"  "Week8"  "Week8"  "Week8"  "Week8"  "Week8"  "Week9"  "Week9"  "Week9"  "Week9"  "Week9" 
#[46] "Week10" "Week10" "Week10" "Week10" "Week10"

nweeks这里有一个使用
base R
的简单解决方案:

nweeks <- 10 #choose as required
days <- paste0("Week",rep(seq(nweeks),each=5))
#> days
# [1] "Week1"  "Week1"  "Week1"  "Week1"  "Week1"  "Week2"  "Week2"  "Week2"  "Week2"  "Week2"  "Week3"  "Week3"  "Week3"  "Week3"  "Week3" 
#[16] "Week4"  "Week4"  "Week4"  "Week4"  "Week4"  "Week5"  "Week5"  "Week5"  "Week5"  "Week5"  "Week6"  "Week6"  "Week6"  "Week6"  "Week6" 
#[31] "Week7"  "Week7"  "Week7"  "Week7"  "Week7"  "Week8"  "Week8"  "Week8"  "Week8"  "Week8"  "Week9"  "Week9"  "Week9"  "Week9"  "Week9" 
#[46] "Week10" "Week10" "Week10" "Week10" "Week10"

nweeks尝试
paste('Week',as.numeric(gl(nrow(dataset),5,nrow(dataset)))
我如何给你打勾?这就是你想要的答案吗?很抱歉,我没有抓住要点。
week
函数返回所提供日期属于一年中的哪一周。如果是这种情况,我可以删除我的答案。我没有尝试转换为“日期”类,因为您的预期结果不同。请尝试
paste('Week',as.numeric(gl(nrow(dataset),5,nrow(dataset)))
如何给您打勾?这就是您想要的答案吗?很抱歉,我没有抓住要点。
week
函数返回所提供日期属于一年中的哪一周。如果是这种情况,我可以删除我的答案。我没有尝试转换为“Date”类,因为您的预期结果不同。事实上,您的解决方案给了我一个想法…我们可以使用Week函数来分配周数,然后我们可以分配新的周值。我查看代码,不知道为什么使用
应用
方式!。我现在让代码变得更简单了。实际上,你的解决方案给了我一个想法…我们可以使用Week函数来分配周数,然后我们可以分配新的周值。我看了我的代码,不知道为什么我使用了
apply
方法!。我现在使代码更容易了。