使用 lubridate::day() 提取日期时,如何设置该日期将定义为从某个时间开始而不是午夜?
When using lubridate::day() to extract day, how to set that day will be defined as starting at a time rather than midnight?
如何使用 lubridate(或其他方式)定义从早上 5 点到凌晨 5 点而不是早上 0 点到凌晨 0 点循环的天数?
我的数据
library(tidyverse)
library(lubridate)
df <- structure(list(created_at = structure(c(1594758763, 1594804279,
1594709405, 1594760043, 1594702619, 1594802165, 1594654865, 1594767077,
1594750851, 1594736216), tzone = "UTC", class = c("POSIXct",
"POSIXt")), mood = 1:10), row.names = c(NA, -10L), class = c("tbl_df",
"tbl", "data.frame"))
df
## # A tibble: 10 x 2
## created_at mood
## <dttm> <int>
## 1 2020-07-14 20:32:43 1
## 2 2020-07-15 09:11:19 2
## 3 2020-07-14 06:50:05 3
## 4 2020-07-14 20:54:03 4
## 5 2020-07-14 04:56:59 5
## 6 2020-07-15 08:36:05 6
## 7 2020-07-13 15:41:05 7
## 8 2020-07-14 22:51:17 8
## 9 2020-07-14 18:20:51 9
## 10 2020-07-14 14:16:56 10
假设我想看看心情如何随着一天的变化而变化。
首先,我更容易将“日”定义为一个月中的某一天(在本例中为七月)。因此,使用day()
提取日期是有用的。
df %>% mutate(day_in_july = day(created_at))
## # A tibble: 10 x 3
## created_at mood day_in_july
## <dttm> <int> <int>
## 1 2020-07-14 20:32:43 1 14
## 2 2020-07-15 09:11:19 2 15
## 3 2020-07-14 06:50:05 3 14
## 4 2020-07-14 20:54:03 4 14
## 5 2020-07-14 04:56:59 5 14
## 6 2020-07-15 08:36:05 6 15
## 7 2020-07-13 15:41:05 7 13
## 8 2020-07-14 22:51:17 8 14
## 9 2020-07-14 18:20:51 9 14
## 10 2020-07-14 14:16:56 10 14
现在,为了我的目的,将“一天”定义为从凌晨 5 点开始而不是午夜更有意义。我该怎么做?
只需减去 5 小时后 day
。这样一天的某个时间,比如凌晨 4 点,将被算作属于前一天。
df %>% mutate(day_in_july = day(created_at - hours(5)))
#> # A tibble: 10 x 3
#> created_at mood day_in_july
#> <dttm> <int> <int>
#> 1 2020-07-14 20:32:43 1 14
#> 2 2020-07-15 09:11:19 2 15
#> 3 2020-07-14 06:50:05 3 14
#> 4 2020-07-14 20:54:03 4 14
#> 5 2020-07-14 04:56:59 5 13
#> 6 2020-07-15 08:36:05 6 15
#> 7 2020-07-13 15:41:05 7 13
#> 8 2020-07-14 22:51:17 8 14
#> 9 2020-07-14 18:20:51 9 14
#> 10 2020-07-14 14:16:56 10 14
如何使用 lubridate(或其他方式)定义从早上 5 点到凌晨 5 点而不是早上 0 点到凌晨 0 点循环的天数?
我的数据
library(tidyverse)
library(lubridate)
df <- structure(list(created_at = structure(c(1594758763, 1594804279,
1594709405, 1594760043, 1594702619, 1594802165, 1594654865, 1594767077,
1594750851, 1594736216), tzone = "UTC", class = c("POSIXct",
"POSIXt")), mood = 1:10), row.names = c(NA, -10L), class = c("tbl_df",
"tbl", "data.frame"))
df
## # A tibble: 10 x 2
## created_at mood
## <dttm> <int>
## 1 2020-07-14 20:32:43 1
## 2 2020-07-15 09:11:19 2
## 3 2020-07-14 06:50:05 3
## 4 2020-07-14 20:54:03 4
## 5 2020-07-14 04:56:59 5
## 6 2020-07-15 08:36:05 6
## 7 2020-07-13 15:41:05 7
## 8 2020-07-14 22:51:17 8
## 9 2020-07-14 18:20:51 9
## 10 2020-07-14 14:16:56 10
假设我想看看心情如何随着一天的变化而变化。
首先,我更容易将“日”定义为一个月中的某一天(在本例中为七月)。因此,使用day()
提取日期是有用的。
df %>% mutate(day_in_july = day(created_at))
## # A tibble: 10 x 3
## created_at mood day_in_july
## <dttm> <int> <int>
## 1 2020-07-14 20:32:43 1 14
## 2 2020-07-15 09:11:19 2 15
## 3 2020-07-14 06:50:05 3 14
## 4 2020-07-14 20:54:03 4 14
## 5 2020-07-14 04:56:59 5 14
## 6 2020-07-15 08:36:05 6 15
## 7 2020-07-13 15:41:05 7 13
## 8 2020-07-14 22:51:17 8 14
## 9 2020-07-14 18:20:51 9 14
## 10 2020-07-14 14:16:56 10 14
现在,为了我的目的,将“一天”定义为从凌晨 5 点开始而不是午夜更有意义。我该怎么做?
只需减去 5 小时后 day
。这样一天的某个时间,比如凌晨 4 点,将被算作属于前一天。
df %>% mutate(day_in_july = day(created_at - hours(5)))
#> # A tibble: 10 x 3
#> created_at mood day_in_july
#> <dttm> <int> <int>
#> 1 2020-07-14 20:32:43 1 14
#> 2 2020-07-15 09:11:19 2 15
#> 3 2020-07-14 06:50:05 3 14
#> 4 2020-07-14 20:54:03 4 14
#> 5 2020-07-14 04:56:59 5 13
#> 6 2020-07-15 08:36:05 6 15
#> 7 2020-07-13 15:41:05 7 13
#> 8 2020-07-14 22:51:17 8 14
#> 9 2020-07-14 18:20:51 9 14
#> 10 2020-07-14 14:16:56 10 14