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
方法!。我现在使代码更容易了。