标签: lubridate

dplyr,lubridate:如何按周汇总数据框?

请考虑以下示例

library(tidyverse)
library(lubridate)
time <- seq(from =ymd("2014-02-24"),to= ymd("2014-03-20"), by="days")
set.seed(123)
values <- sample(seq(from = 20, to = 50, by = 5), size = length(time), replace = TRUE)
df2 <- data_frame(time, values)
df2 <- df2 %>% mutate(day_of_week = wday(time, label = TRUE))

Source: local data frame [25 x 3]

         time values day_of_week
       <date>  <dbl>      <fctr>
1  2014-02-24     30         Mon
2  2014-02-25     45        Tues
3  2014-02-26     30         Wed
4  2014-02-27     50       Thurs
5  2014-02-28     50         Fri
6  2014-03-01     20         Sat
7  2014-03-02 …
Run Code Online (Sandbox Code Playgroud)

r xts lubridate dplyr

11
推荐指数
3
解决办法
9737
查看次数

guess_formats + R + lubridate

我无法理解如何在lubridate中使用guess_formats函数.我有一些日期的矢量以一些未知的格式/顺序排列.我想将它们转换为Date对象(或至少转换为尽可能多的对象).以下代码是我尝试过的:

library(lubridate)
sampleDates <- c("4/6/2004","4/6/2004","4/6/2004","4/7/2004",
        "4/6/2004","4/7/2004","2014-06-28","2014-06-30","2014-07-12",
        "2014-07-29","2014-07-29","2014-08-12")
formats <- guess_formats(sampleDates, c("Ymd", "mdY"))
dates <- as.Date(sampleDates, format=formats)
Run Code Online (Sandbox Code Playgroud)

这给了所有NA.

这显然只是一个简短的例子.在实际情况中,我不知道各种格式散布在哪里,我不会100%确定只有%m /%d /%Y和%Y-%m-%d.有人能让我知道A.在这个例子中如何使用guess_formats或者B.有更适合在lubridate/base R中使用的东西,希望没有很多正则表达式.谢谢!

编辑:我也尝试过parse_date_time.我不明白的是这个例子的以下工作:

parse_date_time(sampleDates,
            orders = c("Ymd", "mdY"),
            locale = "eng")
Run Code Online (Sandbox Code Playgroud)

但这不是:

parse_date_time(sampleDates,
            orders = c("mdY", "Ydm"),
            locale = "eng")
Run Code Online (Sandbox Code Playgroud)

在我的实际数据集中,我不知道格式的顺序,这似乎对此函数很重要.

双重编辑:Dur,好的,我看到我在第一个parse_date_time示例中有Ymd而在第二个中有Ydm ...继续.

r lubridate

10
推荐指数
1
解决办法
1752
查看次数

在R中按月汇总行数

所以我有一个数据框,它有一个日期列,一个小时列和一系列其他数字列.数据框中的每一行是一整天的1小时1天.

数据框如下所示:

          Date  Hour  Melbourne  Southern  Flagstaff
1   2009-05-01     0          0         5         17
2   2009-05-01     2          0         2          1
3   2009-05-01     1          0        11          0
4   2009-05-01     3          0         3          8
5   2009-05-01     4          0         1          0
6   2009-05-01     5          0        49         79
7   2009-05-01     6          0       425        610
Run Code Online (Sandbox Code Playgroud)

小时数无序,因为这是从另一个数据框中的子集.

我想按月和可能按天将数值中的值相加.有谁知道我怎么做到这一点?

aggregate r dataframe lubridate dplyr

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

使用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
查看次数

将dd/mm/yy和dd/mm/yyyy转换为Dates

我有一些字符向量,其中包含各种格式的日期

dates <- c("23/11/12", "20/10/2012", "22/10/2012" ,"23/11/12")
Run Code Online (Sandbox Code Playgroud)

我想将这些转换为日期.我从lubridate包中尝试过非常好的dmy,但这不起作用:

    dmy(dates)
[1] "0012-11-23 UTC" "2012-10-20 UTC" "2012-10-22 UTC" "0012-11-23 UTC"
Run Code Online (Sandbox Code Playgroud)

它将/ 12年视为0012.

所以我现在尝试使用正则表达式来选择每种类型,并使用as.Date()单独转换为日期.但是我试图选择dd/mm/yy的正则表达式不起作用.

dates[grep('[0-9]{2}/[0-9]{2}/[0-9]{2,2}', dates)]
Run Code Online (Sandbox Code Playgroud)

回报

[1] "23/11/12"   "20/10/2012" "22/10/2012" "23/11/12"
Run Code Online (Sandbox Code Playgroud)

我认为{2,2}应该得到正好2个数字,而不是所有数字.我不是很擅长正则表达,所以任何帮助将不胜感激.

谢谢

编辑

我实际拥有的是三种不同类型的日期,如下所示

dates <- c("23-Jul-2013", "23/11/12", "20/10/2012", "22/10/2012" ,"23/11/12")
Run Code Online (Sandbox Code Playgroud)

我想将这些转换为日期

parse_date_time(dates,c('dmy'))
Run Code Online (Sandbox Code Playgroud)

给我

[1] "2013-07-23" "0012-11-23" "2012-10-20" "2012-10-22" "0012-11-23"
Run Code Online (Sandbox Code Playgroud)

然而,这是错误的,0012应该是2012年.我想(一个相当简单的)解决方案.

我现在拥有的一个解决方案(感谢@plannapus)是使用正则表达式我实际上最终创建了这个函数,因为我仍然得到一些情况,其中rubridate方法将12变为0012

    asDateRegex <- function(dates, 
        #selects strings from the vector dates using regexes and converts these to Dates
        regexes = c('[0-9]{2}/[0-9]{2}/[0-9]{4}', #dd/mm/yyyy
            '[0-9]{2}/[0-9]{2}/[0-9]{2}$', #dd/mm/yy
            '[0-9]{2}-[[:alpha:]]{3}-[0-9]{4}'), #dd-mon-yyyy
        orders = 'dmy',
        ...){
        require(lubridate) …
Run Code Online (Sandbox Code Playgroud)

regex r lubridate

9
推荐指数
2
解决办法
7115
查看次数

"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万
查看次数

将日期分配到会计年度

我正在尝试提供一些代码来查看日期,然后将其分配给会计年度.我完全陷入了困境.

我有一个包含POSIXct格式的日期的变量:

df$Date
#2015-05-01 CST
#2015-04-30 CST
#2014-09-01 CST
Run Code Online (Sandbox Code Playgroud)

我需要做的是采取这些日期并返回从5月1日到4月30日的财政年度.例如,2016财年运行2015-05-01到2016-04-30.结果看起来像这样:

df$Date                df$FiscalYear
#2015-05-01 CST        #FY2016
#2015-04-30 CST        #FY2015
#2014-09-01 CST        #FY2015
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法来做到这一点?

r lubridate dplyr

9
推荐指数
3
解决办法
6243
查看次数

lubridate注意到"为函数'%/%'选择签名'Timespan#Timespan'的方法"是什么意思?

当我在RI中运行以下代码时会得到一个奇怪的注释(它只在我第一次在会话中运行代码时出现):

> library(lubridate)
Attaching package: ‘lubridate’
The following object is masked from ‘package:base’:
    date
Warning message:
package ‘lubridate’ was built under R version 3.3.2 
> data.frame(i = interval(ymd(20140101), ymd(20160101)))$i %/% years(1)
Note: method with signature ‘Timespan#Timespan’ chosen for function ‘%/%’,
  target signature ‘Interval#Period’.
  "Interval#ANY", "ANY#Period" would also be valid
[1] 2
Run Code Online (Sandbox Code Playgroud)

我倍感困惑:

  1. 我不清楚它推荐的替代语法是什么.#是R中的注释,所以大概哈希意味着哈希以外的东西,但是什么?
  2. 它告诉我我做错了吗?该笔记似乎暗示它是一个FYI,但如果没有问题,FYI是一个奇怪的事情,可以吐出一个函数.

r lubridate

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

加入两个间隔不正确的数据帧?

我正在尝试找到重叠的间隔,并决定将间隔数据加入到自身中,dplyr::left_join()以便我可以将间隔与lubridate::int_overlaps()每个其他间隔进行比较.

这是我期望left_join()的表现方式.两个tibbles具有三行交叉以形成与9行:

library(tidyverse)

tibble(a = rep("a", 3), b = rep(1, 3)) %>% 
  left_join(tibble(a = rep("a", 3), c = rep(2, 3)))
Joining, by = "a"
# A tibble: 9 x 3
      a     b     c
  <chr> <dbl> <dbl>
1     a     1     2
2     a     1     2
3     a     1     2
4     a     1     2
5     a     1     2
6     a     1     2
7     a     1     2
8     a     1     2
9     a     1     2 …
Run Code Online (Sandbox Code Playgroud)

r lubridate dplyr tidyverse tibble

9
推荐指数
2
解决办法
235
查看次数

标签 统计

lubridate ×10

r ×10

dplyr ×4

aggregate ×1

dataframe ×1

date ×1

datetime ×1

ggplot2 ×1

regex ×1

rstudio ×1

tibble ×1

tidyverse ×1

xts ×1