我有一个包含日期和时间的列的数据框,我创建了一个包含此公式的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
的日期迷宫中找到自己的方式答案 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())