标签: lubridate

从POSIXct中提取小时和秒以便在R中进行绘图

假设我有以下内容 data.frame foo

           start.time duration
1 2012-02-06 15:47:00      1
2 2012-02-06 15:02:00      2
3 2012-02-22 10:08:00      3
4 2012-02-22 09:32:00      4
5 2012-03-21 13:47:00      5
Run Code Online (Sandbox Code Playgroud)

class(foo$start.time)返回

[1] "POSIXct" "POSIXt" 
Run Code Online (Sandbox Code Playgroud)

我想创建一个foo$durationv.的情节foo$start.time.在我的场景中,我只对一天中的时间而不是一年中的实际日期感兴趣.如何将一天中的时间提取为几小时:来自POSIXct矢量类的秒数?

datetime r ggplot2 lubridate

58
推荐指数
4
解决办法
6万
查看次数

R序列的日期与lubridate

嗨,我正在尝试用lubridate获取一系列日期

这不起作用

seq(ymd('2012-04-07'),ymd('2013-03-22'),by=week(1))
Run Code Online (Sandbox Code Playgroud)

基本命令

seq(as.Date('2012-04-7'),as.Date('2013-03-22'),'weeks')
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否有一种优雅的方式与lubridate这样做.

编辑

请忽略:解决自己,所以只留下后人.很高兴在必要时将其删除.

seq(ymd('2012-04-07'),ymd('2013-03-22'),by='weeks')
Run Code Online (Sandbox Code Playgroud)

诀窍

r lubridate

57
推荐指数
2
解决办法
2万
查看次数

创建两个日期之间的所有日期的向量

在R中有一个简单的方法可以逐项列出在两个指定日期之间发生的所有有效日期吗?例如,我想要以下输入:

itemizeDates(startDate="12-30-11", endDate="1-4-12")
Run Code Online (Sandbox Code Playgroud)

生成以下日期:

"12-30-11" "12-31-11", "1-1-12", "1-2-12", "1-3-12", "1-4-12"
Run Code Online (Sandbox Code Playgroud)

我对日期的类和格式很灵活,我只需要实现这个概念.

r lubridate

56
推荐指数
3
解决办法
4万
查看次数

生成两个月中最后一天的序列

我使用lubridate并认为这将是如此简单

ymd("2010-01-31")+months(0:23)
Run Code Online (Sandbox Code Playgroud)

但看看会得到什么.这一切都搞砸了!

 [1] "2010-01-31 UTC" "2010-03-03 UTC" "2010-03-31 UTC" "2010-05-01 UTC" "2010-05-31 UTC" "2010-07-01 UTC" "2010-07-31 UTC" "2010-08-31 UTC" "2010-10-01 UTC"
[10] "2010-10-31 UTC" "2010-12-01 UTC" "2010-12-31 UTC" "2011-01-31 UTC" "2011-03-03 UTC" "2011-03-31 UTC" "2011-05-01 UTC" "2011-05-31 UTC" "2011-07-01 UTC"
[19] "2011-07-31 UTC" "2011-08-31 UTC" "2011-10-01 UTC" "2011-10-31 UTC" "2011-12-01 UTC" "2011-12-31 UTC"
Run Code Online (Sandbox Code Playgroud)

然后我读到了lubridate如何迎合间隔,持续时间和周期等现象.那么,好吧我知道一个月实际上是由(365*4 + 1)/ 48 = 30.438天定义的天数.所以我试图变得聪明并将其重写为

ymd("2010-01-31")+ as.period(months(0:23))
Run Code Online (Sandbox Code Playgroud)

但那只是一个错误.

Error in as.period.default(months(0:23)) : 
  (list) object cannot be coerced to type 'double'
Run Code Online (Sandbox Code Playgroud)

r date lubridate

37
推荐指数
2
解决办法
2万
查看次数

如何使用Lubridate将Excel日期格式转换为正确的日期

我正在使用csv,不幸的是,它使用42705的数字格式记录了日期时间,尽管它应该是2016年12月1日.

我想使用Lubridate或其他软件包将其转换为R中的正确格式.有没有能够处理它的功能?

r lubridate

35
推荐指数
3
解决办法
3万
查看次数

是否有更优雅的方式将两位数年份转换为四位数年份与lubridate?

如果日期向量具有两位数年份,则将mdy()年份在00到68之间变为21世纪年份,将年份从69到99年变为20世纪年份.例如:

library(lubridate)    
mdy(c("1/2/54","1/2/68","1/2/69","1/2/99","1/2/04"))
Run Code Online (Sandbox Code Playgroud)

给出以下输出:

Multiple format matches with 5 successes: %m/%d/%y, %m/%d/%Y.
Using date format %m/%d/%y.
[1] "2054-01-02 UTC" "2068-01-02 UTC" "1969-01-02 UTC" "1999-01-02 UTC" "2004-01-02 UTC"
Run Code Online (Sandbox Code Playgroud)

我可以通过从不正确的日期减去100到2054和2068到1954年和1968年来解决这个问题.但是有一种更优雅且不易出错的解析两位数日期的方法,以便它们在正确处理解析过程本身?

更新:在@JoshuaUlrich指出我之后,strptime我发现了这个问题,它解决了类似于我的问题,但是使用了基础R.

似乎R中日期处理的一个很好的补充是在日期解析函数中处理两位数日期的世纪选择截止值的某种方式.

r date lubridate

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

在R中将字符转换为日期

我对R来说比较新,但这是我第一次不得不处理日期转换.我从CSV读取数据(使用read.table()),但我缩短了数据以突出显示我的问题.当读入R时,Date字段是字符.

简单地说,我的大多数日期都被正确强制,除了少数情况.下面的例子有望向您展示正在发生的事情.

# my attempt to coerce the date -- uses the stringr package
prods.all$Date2 <- as.Date(str_sub(prods.all$Date, 1, 
                str_locate(prods.all$Date, " ")[1]-1), 
                "%m/%d/%Y")

# grab two rows to highlight my issue
temp <- prods.all[c(1925:1926), c(1,8)]

> temp
                   Date      Date2
1925  10/9/2009 0:00:00 2009-10-09
1926 10/15/2009 0:00:00 0200-10-15
Run Code Online (Sandbox Code Playgroud)

如您所见,某些日期的年份不准确.当这一天是两位数时,似乎会出现这种模式.

我查看了几本书并尝试了Google更好的方法,但似乎所有内容都表明我的数据在输入时格式不正确.

鉴于R有多强大,我认为有一种非常简单的方法可以强制我的专栏成为有效的日期,而且我忽略了一个非常明显的解决方案.

我们将非常感谢您提供的任何帮助.

r lubridate

28
推荐指数
2
解决办法
14万
查看次数

如何从R中提取月份

我正在使用该lubridate软件包并应用该month函数从日期中提取月份.我在日期字段上运行了str命令,我得到了

Factor w/ 9498 levels "01/01/1979","01/01/1980",..: 5305 1 1 1 1 1 1 1 1 1 ...

> v1$Date<-month(v1$Date)
Error in as.POSIXlt.character(as.character(x), ...) : 
character string is not in a standard unambiguous format
Run Code Online (Sandbox Code Playgroud)

这是我的数据框的一个例子

https://drive.google.com/file/d/0B6cqWmwsEk20Q2dHblhXZi14Wk0/edit?usp=sharing

我不知道我做错了什么.

r lubridate

24
推荐指数
3
解决办法
16万
查看次数

与as.POSIXct相比,为什么lubridate函数如此慢?

正如标题所说.为什么润滑剂的功能要慢得多?

library(lubridate)
library(microbenchmark)

Dates <- sample(c(dates = format(seq(ISOdate(2010,1,1), by='day', length=365), format='%d-%m-%Y')), 50000, replace = TRUE)

microbenchmark(as.POSIXct(Dates, format = "%d-%b-%Y %H:%M:%S", tz = "GMT"), times = 100)
microbenchmark(dmy(Dates, tz ="GMT"), times = 100)

Unit: milliseconds
expr                                                            min         lq          median      uq          max
1 as.POSIXct(Dates, format = "%d-%b-%Y %H:%M:%S", tz = "GMT")   103.1902    104.3247    108.675     109.2632    149.871
2 dmy(Dates, tz = "GMT")                                        184.4871    194.1504    197.8422    214.3771    268.4911
Run Code Online (Sandbox Code Playgroud)

r lubridate

22
推荐指数
2
解决办法
3217
查看次数

为什么365天等于80000年?

我有一个rubridate, interval并希望得到整数的天数.但是我得到以下奇怪的中间结果:

library("lubridate")
i1 <- interval("2015-01-01 00:00:00", "2016-01-01 00:00:00")
i1 <- interval(ymd_hms("2015-01-01 00:00:00"), ymd_hms("2016-01-01 00:00:00")) # Gives the same result
duration(i1)
# [1] "31536000s (~365 days)"
duration(i1, units = "days")
# [1] "2724710400000s (~86340.86 years)"
Run Code Online (Sandbox Code Playgroud)

这是两个有效的捷径.后者抛出一条消息"强迫间隔到持续时间"(我不知道原因......)

> as.numeric(as.duration(i1), units = "days")
[1] 365
> as.numeric(i1, units = 'days')
Run Code Online (Sandbox Code Playgroud)

(R版本3.3.0日期为2016-05-03,lubridate版本1.5.6.)

r lubridate

22
推荐指数
2
解决办法
4298
查看次数

标签 统计

lubridate ×10

r ×10

date ×2

datetime ×1

ggplot2 ×1