年 - 周在r中增加一周

时间:2015-08-18 12:59:54

标签: r date week-number

我有一个包含日期和时间的列的数据框,我创建了一个包含此公式的Year-Week的新列,

Path     LogTime
HJH      2015-06-19 01:57:11
GTF      2015-07-31 08:23:34
R        2015-07-21 11:52:31

Path2$Week<-strftime(Path2$LogTime,format="%Y-%W",tz="CET")
Path     LogTime                Week
HJH      2015-06-19 01:57:11    2015-24
GTF      2015-07-31 08:23:34    2015-30
R        2015-07-21 11:52:31    2015-29

我现在想再添加一周,所以不要说它

Path     LogTime                Week       NEW Week
HJH      2015-06-19 01:57:11    2015-24    2015-25
GTF      2015-07-31 08:23:34    2015-30    2015-31
R        2015-07-21 11:52:31    2015-29    2015-30

我怎样才能在R中这样做?我很难在R

的日期迷宫中找到自己的方式

2 个答案:

答案 0 :(得分:3)

Path$New.Week <- strftime(as.Date(Path$LogTime)+7, "%Y-%W", tz="CET")
   Path            LogTime    Week New.Week
1  HJH 2015-06-19 01:57:11 2015-24  2015-25
2  GTF 2015-07-31 08:23:34 2015-30  2015-31
3    R 2015-07-21 11:52:31 2015-29  2015-30

正如@DavidArenburg的评论中所提到的,如果LogTime列处于任何正确的日期格式,如POSIXct,就像您的示例中所示,而不是字符串或因素,则可以使用以下命令保存操作:

Path$NewWeek <- strftime(Path$LogTime + 60*60*24*7, format = "%Y-%W", tz = "CET")

答案 1 :(得分:0)

与R的情况一样,“有一个包”。我推荐lubridate。这个chapter涵盖了所有常见任务。这会将您的任务变为一行而不会丢失信息:

library(lubridate)   
data$New.Week <- data$LogTime + weeks(1)

通过剥离LogTime的日期/时间,您将丢失大量信息。通过将LogTime转换为类型字符,当您想要执行数学运算时,您会遇到麻烦。

但是,我打赌你试图获得YYYY-WW,因为你正试图执行一些摘要或其他东西。如果是这种情况,您甚至不需要计算YYYY-WW。只需使用group_by中的dplyr(包含在tidyverse中)。

library(tidyverse)
data %>%
  group_by(year(LogTime),week(LogTime)) %>%
  summarise(count_by_week = n())