如何在 R 中创建一个特定的星期变量?
How to create a specific week variable in R?
我有一个带有 POSIXct 格式的日期时间列的数据框。我知道我可以在 lubridate 中使用 week()
函数来获取每个日期时间发生的一年中的特定星期。例如,2018-01-09 是一年中的第 2 周。但是,我想要做的是根据第一个事件的时间创建一个单独的周列。因此,给定年份中第一个记录的时间戳是第一周的第一天,下一周的开始是 7 天后,一直持续到最后一个记录的时间戳。
这是时间戳的示例数据框。
structure(list(DateTime = structure(c(1530966465, 1530476296,
1532068672, 1530184126, 1531553917, 1533584592, 1533598716, 1534290590,
1530660196, 1531019505, 1531929952, 1531220568, 1531464927, 1531253187,
1533907581, 1531382467, 1531049364, 1534275102, 1533242173, 1530437391,
1531821904, 1531511295, 1530394204, 1530622501, 1532076187, 1530628179,
1532316349, 1531100712, 1534414604, 1533893637), class = c("POSIXct",
"POSIXt"), tzone = "EST")), row.names = c(527906L, 577471L, 537361L,
501302L, 438775L, 208959L, 623171L, 264669L, 483416L, 416530L,
506487L, 565627L, 603002L, 557837L, 257743L, 452464L, 498886L,
59601L, 52207L, 551750L, 541328L, 416508L, 564241L, 599176L,
446559L, 564590L, 538353L, 402453L, 606952L, 12402L), class = "data.frame")
您可以 arrange
基于 DateTime
的数据,得到它的 week
数量,然后从第一个值中减去周值。
library(dplyr)
library(lubridate)
df %>%
arrange(DateTime) %>%
mutate(week = week(DateTime), week = week - first(week) + 1)
在不整理数据的情况下,我们可以从 min
周值中减去。
df %>% mutate(week = week(DateTime), week = week - min(week) + 1)
使用 base R,可以这样做:
df$week <- as.integer(format(df$DateTime, "%V"))
transform(df, week = week - min(week) + 1)
我们可以用 data.table
library(data.table)
library(lubridate)
setDT(df)[order(DateTime), week := week(DateTime) - first(week(DateTime)) + 1]
我有一个带有 POSIXct 格式的日期时间列的数据框。我知道我可以在 lubridate 中使用 week()
函数来获取每个日期时间发生的一年中的特定星期。例如,2018-01-09 是一年中的第 2 周。但是,我想要做的是根据第一个事件的时间创建一个单独的周列。因此,给定年份中第一个记录的时间戳是第一周的第一天,下一周的开始是 7 天后,一直持续到最后一个记录的时间戳。
这是时间戳的示例数据框。
structure(list(DateTime = structure(c(1530966465, 1530476296,
1532068672, 1530184126, 1531553917, 1533584592, 1533598716, 1534290590,
1530660196, 1531019505, 1531929952, 1531220568, 1531464927, 1531253187,
1533907581, 1531382467, 1531049364, 1534275102, 1533242173, 1530437391,
1531821904, 1531511295, 1530394204, 1530622501, 1532076187, 1530628179,
1532316349, 1531100712, 1534414604, 1533893637), class = c("POSIXct",
"POSIXt"), tzone = "EST")), row.names = c(527906L, 577471L, 537361L,
501302L, 438775L, 208959L, 623171L, 264669L, 483416L, 416530L,
506487L, 565627L, 603002L, 557837L, 257743L, 452464L, 498886L,
59601L, 52207L, 551750L, 541328L, 416508L, 564241L, 599176L,
446559L, 564590L, 538353L, 402453L, 606952L, 12402L), class = "data.frame")
您可以 arrange
基于 DateTime
的数据,得到它的 week
数量,然后从第一个值中减去周值。
library(dplyr)
library(lubridate)
df %>%
arrange(DateTime) %>%
mutate(week = week(DateTime), week = week - first(week) + 1)
在不整理数据的情况下,我们可以从 min
周值中减去。
df %>% mutate(week = week(DateTime), week = week - min(week) + 1)
使用 base R,可以这样做:
df$week <- as.integer(format(df$DateTime, "%V"))
transform(df, week = week - min(week) + 1)
我们可以用 data.table
library(data.table)
library(lubridate)
setDT(df)[order(DateTime), week := week(DateTime) - first(week(DateTime)) + 1]