标签: lubridate

如何使用 R 中的 lubridate 将周和年列转换为日期列

我一直在关注 Hadley Wickham 的《R for data science》一书。他对使用 lubridate 有很多建议,但很多函数都假设您有年、月和日。当您只有年和周时,如何使用 lubridate 转换为日期格式?

data.frame(
    year = c(2015, 2015, 2016, 2016, 2016, 2016, 2016),
    week = c(1, 20, 35, 49, 8, 4, 53)
  )

#year   week
#2015    1
#2015    20
#2016   35  
#2016   49  
#2016   8   
#2016   4   
#2016   53
Run Code Online (Sandbox Code Playgroud)

r lubridate dplyr

4
推荐指数
1
解决办法
2793
查看次数

持续时间{lubridate}:持续时间可以为负数吗?

我读过的每个文档似乎都表明lubridate 1.7.4 中的持续时间可能为负数,包括 R 文档提供的示例:

> duration(-1, "days")
> duration(day = -1)
Run Code Online (Sandbox Code Playgroud)

2009 年的这个 bug 修复与示例输出内容类似:

> new_duration(secs = -1, mins = -1, hours = -1)
[1] "-1 hours, -1 minutes and -1 seconds"
Run Code Online (Sandbox Code Playgroud)

但是当我运行时duration(-1, "days"),R 返回:

[1] "86400s (~1 days)"
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

time datetime r lubridate

4
推荐指数
1
解决办法
647
查看次数

将 R 中的日期从破折号格式转换为斜杠格式?

我有以下日期:

my_dataset <- tibble(my_date = c("03-05-2020", "04-05-2020", "05-05-2020", "06-05-2020"))
Run Code Online (Sandbox Code Playgroud)

我想创建一个名为的新列,nice_dates其日期格式为:dd/mm/yyyy格式,所以我最终会得到如下结果:

my_date    | nice_dates 
03-05-2020 | 03/05/2020
04-05-2020 | 04/05/2020
05-05-2020 | 05/05/2020
06-05-2020 | 06/05/2020
Run Code Online (Sandbox Code Playgroud)

我尝试过使用 lubridate pacakge,但在定义新格式时遇到困难,我知道它应该是“%d/%m/%Y”,但是使用 as.Date() 会产生 NA。

我应该只使用 gsub 吗?

r date lubridate

4
推荐指数
1
解决办法
6267
查看次数

如何从日期对象获取月份名称作为输出?

d <- "2021-05-21"
lubridate::month(d)
Run Code Online (Sandbox Code Playgroud)

给出了 5 的输出,我希望 May 显示在那里。有什么猜测吗?

r lubridate

4
推荐指数
1
解决办法
6884
查看次数

R 如何将列名转换为更好的年份和月份格式

我有一个数据框,其中一些列的列名称为年份和月份。

ID <- c(1, 3, 9L, 21L, 15L)
names <- c("as", "ds", "sds", "www", "jgh")
`201401` <- c("12L", "310L", "2379L", "234L", "14L")
`201402` <- c("12L", "310L", "2379L", "234L", "14L")
`201403` <- c("12L", "310L", "2379L", "234L", "14L")
`201404` <- c("12L", "310L", "2379L", "234L", "14L")
Run Code Online (Sandbox Code Playgroud)

我想将年月列名称转换为日期格式,以便诸如201401变为Jan 2014等列。

df <- data.frame(ID, names, `201401`, `201402`, `201403`, `201404`, check.names = FALSE)

betterDate <-  as.Date(df$201401,"%m/%y")  #possible solution ?


Run Code Online (Sandbox Code Playgroud)

获得以下结果的最佳方法是什么?

预期结果 df 列名称为:

ID =c(1, 3, 9L, 21L, 15L)
names = c("as","ds" ,"sds" …
Run Code Online (Sandbox Code Playgroud)

r date lubridate

4
推荐指数
2
解决办法
83
查看次数

从午夜到一天的时间

有一篇文章展示了lubridate自午夜以来如何使用时间.从午夜到一天的几秒钟怎么样?

所以,我不是用06:52:32来获得24752.05,而是如何使用24752.05获得06:52:32?

time r lubridate

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

上一季度末/上一季度的最后一天

使用lubridate,如何计算给定日期的上一季度的最后一天?以下公式似乎不适用于2014年11月3日(其他日期有效)

library(lubridate)
date = as.POSIXct("2014-11-03")
date - days(day(date)) - months(month(date) %% 3 - 1)
# NA
Run Code Online (Sandbox Code Playgroud)

足够有趣的是,更改订单可以:

date - months(month(date) %% 3 - 1) - days(day(date))
# "2014-09-30 UTC"
Run Code Online (Sandbox Code Playgroud)

r date-arithmetic lubridate

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

结束日期与开始日期之间的日期差异

我有一个类似下面的数据.

id   from data   to date
1   2015-03-09   2015-03-14
2   2015-02-22   2015-02-24
2   2015-05-06   2015-05-17
3   2015-02-12   2015-02-16
4   2015-03-10   2015-03-16
4   2015-03-22  2015-04-07
4   2015-06-07  2015-07-07
4   2015-07-06   2015-07-07
4   2015-08-02   2015-08-07
Run Code Online (Sandbox Code Playgroud)

我想创建一个单独的变量,它是按ID分组的日期和下一个日期之间的差异.所以id的第一次将是NA.我尝试了基于stackoverflow中的另一个答案的以下方法,我无法实现.

library(data.table)
chf1 = data.table(id = chf$id,from date = chf$f.date,to_date = chf$t.date)
setkey(chf1,id)
chf1[,diff:=c(NA,difftime(from_date, to_date, units = "days")),by=id]
Run Code Online (Sandbox Code Playgroud)

输出看起来像

id   from_date   to_date      difference
1   2015-03-09   2015-03-14     NA
2   2015-02-22   2015-02-24     NA
2   2015-05-06   2015-05-17     71
3   2015-02-12   2015-02-16     NA
4   2015-03-10   2015-03-16     NA
4   2015-03-22  2015-04-07      6 …
Run Code Online (Sandbox Code Playgroud)

r lubridate dplyr data.table

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

估算多个日期之间的差距

有没有办法找到多个时间轴之间的差距.例如,我的数据如下所示:

library(plyr);library(dplyr)
library(googleVis)

df <- data.frame(Language = structure(c(rep("English",7), rep("German",5), rep("French", 10)), class = "character"),
                 Students = c(LETTERS[1:7], LETTERS[1:5], LETTERS[1:10]), 
                 Start = structure(c(16713,16713,16713,16744,16713,16714,16754,16729,16729,16729,16750,16769,
                                     16724,16724,16745,16724,16759,16766,16723,16722,16736,16796), class = "Date"), 
                 End = structure(c(16762,16720,16762,16755,16720,16764,16762,16765,16765,16749,16761,16770,16758,
                                   16744,16758,16764,16765,16766,16726,16723,16758,16806), class = "Date"))

ddply(df, .(Language), summarise,
      FirstDay = min(Start),
      LastDay = max(End), 
      Duration = LastDay - FirstDay)

plot(gvisTimeline(data=df, rowlabel = "Class", start = "Start", end = "End", options=list(width=600, height=1000) ))
Run Code Online (Sandbox Code Playgroud)

在没有学生上课的时候,我正在计算差距.下图中的间隙以红色突出显示.

在此输入图像描述

r plyr lubridate dplyr

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

使用lubridate和dplyr将多列转换为日期

我正在寻找一种简单的方法将数据框中的所有变量(以'date'开头)转换为日期lubridate::dmy()(它们当前是dmy格式的字符).

我原本以为会有mutate_if或mutate_each,dplyr但我正在努力弄清楚如何.

r date lubridate dplyr

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

标签 统计

lubridate ×10

r ×10

dplyr ×4

date ×3

time ×2

data.table ×1

date-arithmetic ×1

datetime ×1

plyr ×1