标签: lubridate

使用ggplot2绘制x轴上的日期和y轴上的时间

我已经阅读了一系列事件发生的37个日期和时间.它现在作为POSIXlt对象.我想要一个图形表示事件发生在每一天的时间.所以x轴应该是日期,y轴应该是一天中的时间.

然后我试着用ggplot2绘制它

qplot(day(dttm), hour(dttm))
Run Code Online (Sandbox Code Playgroud)

这就是我想要的东西,但它没有分钟的分辨率.如何在y轴中包含小时和分钟?

这是一些示例数据

dttm
 [1] "2011-11-16 10:39:20" "2011-11-16 10:56:32" "2011-11-16 11:52:43" "2011-11-16 12:10:42"
 [5] "2011-11-16 13:10:13" "2011-11-16 13:41:10" "2011-11-16 13:48:07" "2011-11-16 14:54:04"
 [9] "2011-11-17 07:05:23" "2011-11-17 07:34:24" "2011-11-17 07:53:01" "2011-11-17 07:57:04"
[13] "2011-11-17 08:09:16" "2011-11-17 08:23:43" "2011-11-17 10:20:54" "2011-11-17 10:45:13"
[17] "2011-11-17 10:49:32" "2011-11-17 11:16:08" "2011-11-17 11:24:05" "2011-11-17 11:50:11"
[21] "2011-11-17 11:52:47" "2011-11-17 11:54:42" "2011-11-17 11:55:25" "2011-11-17 11:57:34"
[25] "2011-11-17 12:06:15" "2011-11-17 12:08:05" "2011-11-17 12:08:33" "2011-11-17 12:30:13"
[29] "2011-11-17 13:24:41" "2011-11-17 13:44:41" "2011-11-17 13:48:55" "2011-11-17 14:59:08"
[33] …
Run Code Online (Sandbox Code Playgroud)

datetime r ggplot2 lubridate

9
推荐指数
1
解决办法
2319
查看次数

在R中计算星期五或星期一的月数

我想要一个计算每月特定天数的函数.

即.2013年11月 - > 5周五..而13年12月将返回4周五..

有一个优雅的功能会返回这个?

library(lubridate)

num_days <- function(date){
x <- as.Date(date)  
start = floor_date(x, "month")
count = days_in_month(x)

d = wday(start) 
sol = ifelse(d > 4, 5, 4) #estimate that is the first day of the month is after Thu or Fri then the week will have 5 Fridays
sol
}

num_days("2013-08-01")
num_days(today())
Run Code Online (Sandbox Code Playgroud)

什么是更好的方法来做到这一点?

r lubridate

9
推荐指数
1
解决办法
2020
查看次数

"parse_dt"未从当前命名空间解析(lubridate)

我开始使用lubridate包收到此错误消息:

as.Date(ymd_hms("2014-1-1 12:31:15"))
Run Code Online (Sandbox Code Playgroud)

.Call中的错误("parse_dt",x,格式,TRUE):"parse_dt"未从当前命名空间解析(lubridate)

我之前从未遇到过这种情况,我只能lubridate在长脚本中使用深度(实际包中有几个嵌套函数)时才会创建此错误- 我不知道哪一行导致了问题(我已经调试了几个小时)现在没有任何运气).

而且,它似乎只发生在我使用Rstudio时,而不是在Rgui中运行相同的代码时.

一旦发生,我必须重新启动R lubridate才能再次工作.此外,在它发生后,我在我的全球环境中有这个对象:

> ls()
[1] "oldLC"
> oldLC
[1] "English_Australia.1252"
Run Code Online (Sandbox Code Playgroud)

我知道我应该发布可以复制的错误,但我不能自己重现这一点,我希望指针在哪里看!

R version 3.0.2 (2013-09-25)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1]  LC_COLLATE=English_Australia.1252  LC_CTYPE=English_Australia.1252   
[3] LC_MONETARY=English_Australia.1252 LC_NUMERIC=C                      
[5] LC_TIME=English_Australia.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] HIEv_0.3        RODBC_1.3-10    maptools_0.8-27 sp_1.0-14       stringr_0.6.2  
[6] plyr_1.8        RCurl_1.95-4.1  bitops_1.0-6    rjson_0.2.13    lubridate_1.3.3
[11] roxygen2_3.0.0 

loaded via a namespace (and not attached):
[1] brew_1.0-6      codetools_0.2-8 digest_0.6.4    foreign_0.8-57  grid_3.0.2 …
Run Code Online (Sandbox Code Playgroud)

r rstudio lubridate

9
推荐指数
1
解决办法
1425
查看次数

从POSIXct对象中提取周数

是否有lubridate提取周数的功能?我试图寻找,但找不到任何有用的目的.

week()功能做了不同的事情.

描述

日期时间必须是POSIXct,POSIXlt,Date,chron,yearmon,yearqtr,zoo,zooreg,timeDate,xts,> its,ti,jul,timeSeries和fts对象.周数是在日期和1月1日之间发生的完整七天期间的数量加一.isoweek返回ISO 8601系统中出现的一周,该系统使用了一个reoccuring闰周.

r date lubridate

9
推荐指数
1
解决办法
1万
查看次数

减去月份 - 月份最后一天的问题?

关于R.中日期的快速提问.看看这段代码:

Sys.Date() - months(3)
# [1] "2013-12-31"
Sys.Date() - months(18)
# [1] NA
Run Code Online (Sandbox Code Playgroud)

我已经加载了包lubridate并按照提供的说明进行操作,我无法理解这种行为.它过去工作得很好,今天是我注意到从今天的日期NA减去超过12个月的第一天(减去不到12个月的工作正常).

我很感激,如果有人能够向我解释为什么这不起作用,和/或建议一个更"强大"的方式.它与今天是本月的最后一天(第31天)有关吗?

我问,因为这有效:

Sys.Date() - years(2)
# [1] "2012-03-31"
Run Code Online (Sandbox Code Playgroud)

r date lubridate

8
推荐指数
1
解决办法
2701
查看次数

为什么我在rubridate日期的功能如此之慢?

我写了这个我一直用的功能:

# Give the previous day, or Friday if the previous day is Saturday or Sunday.
previous_business_date_if_weekend = function(my_date) {
    if (length(my_date) == 1) {
        if (weekdays(my_date) == "Sunday") { my_date = lubridate::as_date(my_date) - 2 }
        if (weekdays(my_date) == "Saturday") { my_date = lubridate::as_date(my_date) - 1 }
        return(lubridate::as_date(my_date))
    } else if (length(my_date) > 1) {
        my_date = lubridate::as_date(sapply(my_date, previous_business_date_if_weekend))
        return(my_date)
    }
}
Run Code Online (Sandbox Code Playgroud)

当我将其应用于具有数千行的数据帧的日期列时出现问题.这太慢了. 有什么想法为什么?

r date lubridate

8
推荐指数
3
解决办法
1256
查看次数

为什么R包lubridate无法解析多种格式的向量?

我正在使用包lubridate来解析异构格式化日期的向量并将它们转换为字符串,如下所示:

parse_date_time(c('12/17/1996 04:00:00 PM','4/18/1950 0130'), c('%m/%d/%Y %I:%M:%S %p','%m/%d/%Y %H%M'))
Run Code Online (Sandbox Code Playgroud)

这是结果:

[1] NA NA
Warning message:
All formats failed to parse. No formats found.
Run Code Online (Sandbox Code Playgroud)

如果我删除%p第一个格式字符串,它错误地解析第一个日期字符串,仍然不解析第二个,如下所示:

[1] "1996-12-17 04:00:00 UTC" NA                       
Warning message:
 1 failed to parse. 
Run Code Online (Sandbox Code Playgroud)

字符串中的4PM时间在结果中解析为4AM.

有谁经历过这种奇怪的行为?

r date lubridate

7
推荐指数
1
解决办法
4967
查看次数

R:从日落开始计算的天数

我正在分析由几个环境变量组成的复杂数据集中的时间模式以及来自各种动物物种的活动数据.这些数据已通过多个实验设置收集,每个设置的数据每分钟存储一次.该项目已经运行了几年,所以我的数据集相当大.

我的一个数据集的前几行看起来像这样:

> head(setup_01)
DateTime                Film_number unused PIR Wheel Temperature LightOld LightDay LightNight LightUV IDnumbers    error mouse shrew vole rat frog rest extra_info odour
1 2015-03-10 12:27:10                  x   0       0       13.40  1471.34    -0.97    1331.29  700.42           no error     0     0    0   0    0    0                1
2 2015-03-10 12:28:10                  x   0       0       13.43  1471.38    -1.07    1291.11  731.32           no error     0     0    0   0    0    0                1
3 2015-03-10 12:29:10                  x   0       0       13.31  1471.24    -1.08    1368.57 1016.02           no error     0     0    0 …
Run Code Online (Sandbox Code Playgroud)

datetime r time-series lubridate r-maptools

7
推荐指数
1
解决办法
655
查看次数

如何使用 Lubridate 将日期格式化为“YYYY-Mon”?

我想在第 1 个月的两个指定时刻之间创建一个日期向量,如本主题中所述(创建两个日期之间的所有天数的向量),然后将其转换为用于数据可视化的因子。

但是,我想在 YYYY-Mon 中有日期,即。2010 年 2 月,格式。但到目前为止,我只设法使用标准格式 2010-02-01 的日期,使用这样的代码:

require(lubridate)
first <- ymd_hms("2010-02-07 15:00:00 UTC")
start <- ymd(floor_date(first, unit="month"))

last <- ymd_hms("2017-10-29 20:00:00 UTC")
end <- ymd(ceiling_date(last, unit="month"))

> start
[1] "2010-02-01"

> end
[1] "2017-11-01"
Run Code Online (Sandbox Code Playgroud)

如何将格式更改为 YYYY-Mon?

format r date lubridate

7
推荐指数
1
解决办法
4984
查看次数

使用累计的输出差异

为什么这两个操作不同?

library(lubridate)
library(magrittr)

> seconds_to_period(1:1000) %>% cumsum %>% sum
[1] 14492440
> 1:1000 %>% cumsum %>% sum
[1] 167167000
Run Code Online (Sandbox Code Playgroud)

但是,我看到的问题是,该事实cumsum 仅增加了周期的秒数,而忽略了其余的时间

seconds_to_period(60) +  seconds_to_period(60)
[1] "2M 0S"
Run Code Online (Sandbox Code Playgroud)

> cumsum(c(seconds_to_period(60), seconds_to_period(60)))
[1] 0 0
Run Code Online (Sandbox Code Playgroud)

为什么此行为是默认形式?我认为这很不直观。此外,克服此问题并获得与cumsum(1:1000)使用“ Period”类润滑脂相同的结果的方法是什么,该方法不需要执行以下操作:

c(seconds_to_period(60), seconds_to_period(60)) %>% as.numeric %>% cumsum

r lubridate cumsum

7
推荐指数
1
解决办法
118
查看次数

标签 统计

lubridate ×10

r ×10

date ×5

datetime ×2

cumsum ×1

format ×1

ggplot2 ×1

r-maptools ×1

rstudio ×1

time-series ×1