我有一个数据框df。有没有一种方法可以填充星期数(如数据框中的第二列所示)。我的意思是周数应该是连续的。例如。
df <- structure(list(Date = structure(c(1527120000, 1527206400, 1527292800,
1527379200, 1527465600, 1527552000, 1527638400, 1527724800, 1527811200,
1527897600, 1527984000, 1528070400, 1528156800, 1528243200, 1528329600,
1528416000, 1528502400, 1528588800, 1528675200, 1528761600, 1528848000,
1528934400, 1529020800, 1529107200, 1529193600, 1529280000, 1529366400,
1529452800, 1529539200, 1529625600, 1529712000, 1529798400, 1529884800,
1529971200, 1530057600, 1530144000), class = c("POSIXct", "POSIXt"
), tzone = "UTC"), Week = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5,
5, 5, 5, 6)), row.names = c(NA, -36L), class = c("tbl_df", "tbl",
"data.frame"))
这里的第一个日期是24-05-2018
,因此应将其编号为1。此数字应在接下来的6天中继续,然后在2以后的7天中开始。 4周后,该数字不应再为1,该数字应编号为5,依此类推。因此,基本上我需要检查4年范围内时间序列表的平均值。因此,从第1天(例如2000年)到最后一天(例如2014年),应该填充星期数。有办法吗?
答案 0 :(得分:2)
我们可以使用gl
library(dplyr)
df %>%
mutate(Week = as.integer(gl(n(), 7, n())))
答案 1 :(得分:2)
日期值基本上是自特定日期以来的秒数。在这里,我们可以使用一些模数学来计算周偏移量
df %>%
mutate(NewWeek = as.numeric(Date-min(Date)) %/% (60*60*24*7) + 1)
我们减去第一个日期,然后看看已经过去了七个天。
答案 2 :(得分:2)
您可以使用lst1 <- split(df, df[c("A", "E")], drop = TRUE)
:
lubridate
library(lubridate)
df$Data <- trunc((ymd(df$Date) - min(ymd(df$Date)))/dweeks(1)) + 1
需要从1开始对周进行编号。1
会舍弃小数位。
答案 3 :(得分:1)
您也可以尝试:
df %>%
mutate(Week = ceiling(row_number()/7))
Date Week
<dttm> <dbl>
1 2018-05-24 00:00:00 1
2 2018-05-25 00:00:00 1
3 2018-05-26 00:00:00 1
4 2018-05-27 00:00:00 1
5 2018-05-28 00:00:00 1
6 2018-05-29 00:00:00 1
7 2018-05-30 00:00:00 1
8 2018-05-31 00:00:00 2
9 2018-06-01 00:00:00 2
10 2018-06-02 00:00:00 2
它不考虑日期,只是每7行分组一次。
与base R
相同:
ceiling(1:NROW(df)/7)
[1] 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 3 4 4 4 4 4 4 4 5 5 5 5 5 5 5 6