年-周在 r 中加一周

Year-Week add a week in r

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

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

的日期迷宫中找不到方向
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")

与 R 的情况一样,"There is a package for that"。我推荐lubridatechapter 涵盖了所有常见任务。这会将您的任务变成一行而不会丢失信息:

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

通过从 LogTime 中删除 day/time,您将丢失大量信息。并且把LogTime变成type character,当你想进行数学运算时,你是在自找麻烦。

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

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