我一直在关注 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) 我读过的每个文档似乎都表明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)
这是怎么回事?
我有以下日期:
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 吗?
d <- "2021-05-21"
lubridate::month(d)
Run Code Online (Sandbox Code Playgroud)
这给出了 5 的输出,我希望 May 显示在那里。有什么猜测吗?
我有一个数据框,其中一些列的列名称为年份和月份。
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) 有一篇文章展示了lubridate自午夜以来如何使用时间.从午夜到一天的几秒钟怎么样?
所以,我不是用06:52:32来获得24752.05,而是如何使用24752.05获得06:52:32?
使用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) 我有一个类似下面的数据.
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) 有没有办法找到多个时间轴之间的差距.例如,我的数据如下所示:
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)
在没有学生上课的时候,我正在计算差距.下图中的间隙以红色突出显示.
我正在寻找一种简单的方法将数据框中的所有变量(以'date'开头)转换为日期lubridate::dmy()(它们当前是dmy格式的字符).
我原本以为会有mutate_if或mutate_each,dplyr但我正在努力弄清楚如何.