添加星期计数序列,使其与不常见日期的日期列对齐

时间:2019-04-10 02:17:58

标签: r lubridate

我正在构建一个数据集,希望能够从第一个日期开始到最后一个日期添加一个星期数到数据集中。我正在使用它来汇总更大的数据集,最终我希望按周进行汇总。

使用此示例:

library(dplyr)

df <- tibble(Date = seq(as.Date("1944/06/1"), as.Date("1944/09/1"), "days"), 
Week = nrow/7)
# A tibble: 93 x 2
   Date        Week
   <date>     <dbl>
 1 1944-06-01 0.143
 2 1944-06-02 0.286
 3 1944-06-03 0.429
 4 1944-06-04 0.571
 5 1944-06-05 0.714
 6 1944-06-06 0.857
 7 1944-06-07 1    
 8 1944-06-08 1.14 
 9 1944-06-09 1.29 
10 1944-06-10 1.43 
# … with 83 more rows

这绝对是不对的。另外,我的真实数据集不是按顺序构建的,两周之间缺少很多天,因此无法进行连续的连续计数。

理想的最终结果是根据实际日期(而不是使用seq_along()类型的结果硬编码)添加一个“星期”列

2 个答案:

答案 0 :(得分:1)

您可以将所有File值与第一个public async Task<byte[]> OnPostExport(int year) { //logic return filebytearray; } var dt = await _exportService.OnPostExport(1); return File(dt, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", sFileName); 相减,并使用Date在“周”中计算出差值,Date将所有值相加并加1开始从1开始的计数器。

difftime

要在floor管道中使用此代码,您可以

df$week <- floor(as.numeric(difftime(df$Date, df$Date[1], units = "weeks"))) + 1


df
# A tibble: 93 x 2
#   Date        week
#   <date>     <dbl>
# 1 1944-06-01     1
# 2 1944-06-02     1
# 3 1944-06-03     1
# 4 1944-06-04     1
# 5 1944-06-05     1
# 6 1944-06-06     1
# 7 1944-06-07     1
# 8 1944-06-08     2
# 9 1944-06-09     2
#10 1944-06-10     2
# … with 83 more rows

数据

dplyr

答案 1 :(得分:1)

与Ronak相似的解决方案,但使用lubridate

library(lubridate)

(df <- tibble(Date = seq(as.Date("1944/06/1"), as.Date("1944/09/1"), "days"),
              week = interval(min(Date), Date) %>%
                as.duration() %>%
                as.numeric("weeks") %>%
                floor() + 1))