年-周在 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"。我推荐lubridate
。 chapter 涵盖了所有常见任务。这会将您的任务变成一行而不会丢失信息:
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())
我有一个包含日期和时间的列的数据框,我使用此公式创建了一个包含年-周的新列,
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"。我推荐lubridate
。 chapter 涵盖了所有常见任务。这会将您的任务变成一行而不会丢失信息:
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())