考虑下面的例子
\n\n library(lubridate)\n library(tidyverse)\n\n> hour(ymd_hms(\'2008-01-04 00:00:00\'))\n[1] 0\nRun Code Online (Sandbox Code Playgroud)\n\n现在,
\n\ndataframe <- data_frame(time = c(ymd_hms(\'2008-01-04 00:00:00\'),\n ymd_hms(\'2008-01-04 00:01:00\'),\n ymd_hms(\'2008-01-04 00:02:00\'),\n ymd_hms(\'2008-01-04 00:03:00\')),\n value = c(1,2,3,4))\n\nmutate(dataframe,hour = strftime(time, format="%H:%M:%S"),\nhour2 = hour(time)) \n\n# A tibble: 4 \xc3\x97 4\n time value hour hour2\n <dttm> <dbl> <chr> <int>\n1 2008-01-03 19:00:00 1 19:00:00 19\n2 2008-01-03 19:01:00 2 19:01:00 19\n3 2008-01-03 19:02:00 3 19:02:00 19\n4 2008-01-03 19:03:00 4 19:03:00 19\nRun Code Online (Sandbox Code Playgroud)\n\n这里发生了什么?为什么日期会转换为我不知道的当地时间?
\n我试图找到两个润滑日期向量的交集。但是,在应用该lubridate::intersect函数之后,日期将转换为双精度值。
library(lubridate)
> a <- c(ymd("2017-01-01"), ymd("2017-01-02"), ymd("2017-01-03"), ymd("2017-01-04"))
> b <- c(ymd("2017-01-02"), ymd("2017-01-03"), ymd("2017-01-04"), ymd("2017-01-05"))
> lubridate::intersect(a, b)
[1] 17168 17169 17170
Run Code Online (Sandbox Code Playgroud)
如何保留原始日期类型?
我在创建每 15 分钟一行的时间序列(POSIXct 或 dttm 列)时遇到问题。
在 2015 年 1 月 1 日和 2016 年 12 月 31 日之间每 15 分钟就会出现这样的情况(此处为月/日/年小时:分钟):
1/15/2015 0:00
1/15/2015 0:15
1/15/2015 0:30
1/15/2015 0:45
1/15/2015 1:00
Run Code Online (Sandbox Code Playgroud)
循环开始日期为 01/01/2015 0:00 然后添加 15 分钟直到 12/31/2016 23:45?
有谁知道如何轻松做到这一点?
我看过这个答案,其中列出了时间点之间的所有日期。理想情况下,我想说明开始日期和结束日期,以及向量中想要的元素数量,并获取包括重复项在内的随机日期。
我试图从 R 中的日期对象中获取周数和年份。
在那之前,我是分开做的:我使用 isoweek() 函数来提取周和 year() 函数来提取年份。这样我的 data.frame 有 3 个变量:日期、周、年
除了年初/年末外,这是有效的:例如,2015 年有 53 周,2016 年 1 月 1 日属于 2015 年的第 53 周……但根据我的代码,2016 年 1 月 1 日是第 53 周但是 2016 年,而我希望它是 2015 年的第 53 周。
那么在 R 中有没有办法提取一起有意义的周数和年份?
我知道有很多关于此的问题,但在这个特定的年初/年终问题上没有发现任何问题。
谢谢 !
我需要从日期中提取两位数的天数。
例如:
date <- as.Date(01-01-2016)
Run Code Online (Sandbox Code Playgroud)
year(date) 会给 '2016'month(date) 会产生“1”day(date) 会返回“1”我想要month()并day()返回 '01'
标准的 %D 或 %M 在这里似乎不起作用。任何建议,将不胜感激!
如何获得润滑间隔对象的“平均值”(或更准确地说是中点)?我尝试过使用基本的mean()函数,但它返回一个双精度值。
library(lubridate)
ex = interval(ymd("2009-05-01"), ymd("2009-07-01"))
mean(ex)
[1] 5270400
Run Code Online (Sandbox Code Playgroud) 我正在尝试筛选tibble特定日期。如果我尝试>=该日期和<=同一日期,代码将导致返回 0 行。我已经确定它是<=返回FALSE我认为应该返回的行TRUE。下面是一个工作示例。我只对相关回复感兴趣tidyverse-lubridate请不要使用 Base R 或其他软件包发布答案(我知道如何以这些其他方式解决问题。
数据
library(dplyr)
library(lubridate)
d <- structure(list(Date = structure(c(1572679159, 1572703322, 1572710363, 1572722578,
1572727765, 1572728767, 1572730032),
class = c("POSIXct", "POSIXt"),
tzone = "UTC", label = c(EndDate = "EndDate")),
ID = 1:7), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"),
row.names = c(NA, -7L))
Run Code Online (Sandbox Code Playgroud)
当我尝试以下操作时,它返回tibble0 行:
d %>%
filter(Date >= as_date("2019-11-02"),
Date <= as_date("2019-11-02"))
Run Code Online (Sandbox Code Playgroud)
然而,当我尝试这样做时,它有效。我缺少什么?问题是,我想Date <= as_date("2019-11-03")返回 …
我有一个问题,从一天开始到月底的最快方法是什么。我有一个非常大的表,我希望我的代码很快。我当前的代码如下所示:
library(lubridate)
end_of_month <- function(date){
day(date) <- days_in_month(date)
date
}
Run Code Online (Sandbox Code Playgroud)
我有另一个问题。从随机日期获取下个月的最后一天是一种快速的方法吗?
"2019-05-15" %>% as.Date() %m+% months(1) %>% end_of_month # 2019-06-30
Run Code Online (Sandbox Code Playgroud)
我可以一步完成还是需要一个额外的功能来处理这个问题?
使用is_doublewith 时select_if,返回值包括 lubridatedate数据类型的列。为什么是这样?
这是一个使用该today()函数的简单示例。
library(tidyverse)
library(lubridate)
mtcars %>%
as_tibble() %>% # Convert to tibble
mutate(today = today()) %>% # Create a date column
select_if(is_double) # Select double columns
Run Code Online (Sandbox Code Playgroud)
# A tibble: 32 x 12
mpg cyl disp hp drat wt qsec vs am gear carb today
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <date>
1 21 6 160 110 3.9 2.62 16.5 0 1 4 4 2020-06-25 …Run Code Online (Sandbox Code Playgroud) lubridate ×10
r ×10
dplyr ×4
date ×3
datetime ×1
iso8601 ×1
tidyr ×1
time-series ×1
timezone ×1
week-number ×1