在 R 包 lubridate 中,我可以使用以下语法轻松创建日期:
> mdy("5/4/2015")
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,它产生以下结果:
[1] "2015-05-04 UTC"
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试将该值添加到数组中,它似乎会从 UTC 更改为我的本地时间 (EDT):
> c(mdy("5/4/2015"))
[1] "2015-05-03 20:00:00 EDT"
Run Code Online (Sandbox Code Playgroud)
由于我不关心时间,这不会对我产生太大影响,只是这会导致日期向后移动 1,如下所示:
> day(mdy("5/4/2015"))
[1] 4
> day(c(mdy("5/4/2015")))
[1] 3
Run Code Online (Sandbox Code Playgroud)
对我来说,向数组添加一些东西的行为不应该改变那个东西的价值。我在这里遗漏了什么,有没有办法解决这个问题?
问题:我有两个数据帧,我想根据一个数据帧在另一个数据帧的间隔中的日期/时间来合并。
流量:日期和时间 (Posixct)、频率
mydata:间隔、频率总和
我现在想计算流量的 Posixct 时间是否在 mydata 的间隔内,如果这是 TRUE,我想计算 mydata 中“频率总和”列中的频率。
我遇到的两个问题: 1. 流量数据框的行数明显多于 mydata。我不知道如何告诉 R 循环遍历流量中的每个观察结果以检查 mydata 中的一行。
这是数据:
DateTime <- c("2014-11-01 04:00:00", "2014-11-01 04:03:00", "2014-11-01 04:06:00", "2014-11-01 04:08:00", "2014-11-01 04:10:00", "2014-11-01 04:12:00", "2015-08-01 04:13:00", "2015-08-01 04:45:00", "2015-08-01 14:15:00", "2015-08-01 14:13:00")
DateTime <- as.POSIXct(DateTime)
Frequency <- c(1,2,3,5,12,1,2,2,1,1)
traffic <- data.frame(DateTime, Frequency)
library(lubridate)
DateTime1 <- c("2014-11-01 04:00:00", "2015-08-01 04:03:00", "2015-08-01 14:00:00")
DateTime2 <- c("2014-11-01 04:15:00", "2015-08-01 04:13:00", "2015-08-01 14:15:00")
DateTime1 <- as.POSIXct(DateTime1)
DateTime2 <- as.POSIXct(DateTime2) …
Run Code Online (Sandbox Code Playgroud) 当通过 Rscript 运行时,我在执行依赖于包方法的函数时遇到了一些麻烦。我已经知道方法不是通过 Rscript附加的,但它应该由依赖包加载(和可用)并通过它们的包命名空间访问,至少我是这么认为的......
示例 R 脚本(通过 执行Rscript
):
#!/usr/bin/Rscript
sessionInfo()
tryCatch({
str(lubridate::days(30))
}, error = function(e) {
print(e)
})
sessionInfo()
tryCatch({
str(lubridate::days(30))
}, error = function(e) {
print(e)
})
library(methods)
str(lubridate::days(30))
sessionInfo()
Run Code Online (Sandbox Code Playgroud)
输出,下面混合了我的评论和问题......
首先,这是启动sessionInfo()
:
# sessionInfo()
R version 3.2.2 (2015-08-14)
Platform: x86_64-redhat-linux-gnu (64-bit)
Running under: Amazon Linux AMI 2015.09
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base …
Run Code Online (Sandbox Code Playgroud) 我正在做一个项目,需要使用 ggplot2 来绘制时间序列数据。这是我正在使用的数据集:
这就是我现在所做的:
library(ggplot2)
library(lubridate)
eur$Date <- as.Date(eur$Date)
ggplot(eur, aes(Date, EUR)) + geom_line()
Run Code Online (Sandbox Code Playgroud)
我得到了这个非常奇怪的情节。有人可以帮我解决这个问题吗?
考虑下面的例子
time = c('2013-01-03 22:04:21.549', '2013-01-03 22:04:21.549', '2013-01-03 22:04:21.559', '2013-01-03 22:04:23.559' )
ref = c('2013-01-03 22:04:20', '2013-01-03 22:04:20', '2013-01-03 22:04:20', '2013-01-03 22:04:20')
value = c(1,2,3,4)
data <- data_frame(time, ref, value)
data <-data %>% mutate(time = ymd_hms(time),
ref = ymd_hms(ref),
difftime = time - ref)
# A tibble: 4 × 4
time ref value difftime
<dttm> <dttm> <dbl> <time>
1 2013-01-03 22:04:21 2013-01-03 22:04:20 1 1.549 secs
2 2013-01-03 22:04:21 2013-01-03 22:04:20 2 1.549 secs
3 2013-01-03 22:04:21 2013-01-03 22:04:20 3 …
Run Code Online (Sandbox Code Playgroud) 考虑下面的例子
library(lubridate)
library(tidyverse)
library(scales)
library(ggplot2)
dataframe <- data_frame(time = c(ymd_hms('2008-01-04 00:00:00'),
ymd_hms('2008-01-04 00:01:00'),
ymd_hms('2008-01-04 00:02:00'),
ymd_hms('2008-01-04 00:03:00'),
ymd_hms('2008-01-05 00:00:00'),
ymd_hms('2008-01-06 00:01:00'),
ymd_hms('2008-01-07 00:02:00'),
ymd_hms('2008-01-08 00:03:00')),
value = c(1,2,3,4,5,6,7,8))
# A tibble: 8 × 2
time value
<dttm> <dbl>
1 2008-01-03 19:00:00 1
2 2008-01-03 19:01:00 2
3 2008-01-03 19:02:00 3
4 2008-01-03 19:03:00 4
5 2008-01-04 19:00:00 5
6 2008-01-05 19:01:00 6
7 2008-01-06 19:02:00 7
8 2008-01-07 19:03:00 8
Run Code Online (Sandbox Code Playgroud)
我需要做的很简单:我需要在我的样本中计算所有天中value
同一小时-分-秒的平均值,并绘制它。
我做了以下工作:
dataframe <- dataframe %>%
mutate(hour …
Run Code Online (Sandbox Code Playgroud) 我发现自己遇到了一个问题,我无法找到解决方案的线索 - 这使得实际处理它变得非常困难......这里是:在 R(使用 R-Studio)中,我尝试创建一个 Date 对象图书馆lubridate
:
library(lubridate)
ymd(20161001)
Run Code Online (Sandbox Code Playgroud)
这导致错误:
as.POSIXlt.POSIXct(x, tz) 中的错误:(从警告转换)未知时区“GMT”
最后一个命令的第二次运行(以及任何后续运行)会产生正确的结果:
ymd(20161001)
[1] "2016-01-01"
Run Code Online (Sandbox Code Playgroud)
直到我重新启动我的 R 会话,当第一次运行再次触发错误时。我检查了几个设置,但无法找到任何改变,从第一到第二轮。例如,这是 my 的输出sessionInfo()
:
R version 3.3.2 (2016-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
locale:
[1] LC_COLLATE=Dutch_Netherlands.1252 LC_CTYPE=Dutch_Netherlands.1252 LC_MONETARY=Dutch_Netherlands.1252 LC_NUMERIC=C
[5] LC_TIME=Dutch_Netherlands.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] lubridate_1.6.0
loaded via a namespace (and not attached):
[1] magrittr_1.5 tools_3.3.2 stringi_1.1.2 …
Run Code Online (Sandbox Code Playgroud) 我会创建几个日期。
library(lubridate)
x <- ymd(c("2012-03-26", "2012-05-04", "2012-09-23", "2012-12-31"))
Run Code Online (Sandbox Code Playgroud)
我可以从这些x
值中提取年份和季度。
quarter(x, with_year = TRUE, fiscal_start = 10)
[1] 2012.2 2012.3 2012.4 2013.1
但我似乎不能只提取财政年度。这行不通,但什么会呢?
year(x, with_year = TRUE, fiscal_start = 10)
我收到以下错误消息:
年份错误(x,with_year = TRUE,Financial_start = 10):未使用的参数(with_year = TRUE,Financial_start = 10)
我一直在练习和学习使用包含lubridate
数据类型的列来处理 R 数据框,例如我的其他问题中的示例问题。
现在,我正在尝试做相当于加入两个数据帧的工作,但是通过一个数据帧中的一个时间戳是否落在另一个数据帧中的一个时间戳来加入它们interval
。例如:
这是df1
:
> glimpse(df1)
Observations: 6,160
Variables: 4
$ upload_id <int> 2, 2, 2, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, ...
$ site_id <int> 2, 2, 2, 2, 2, 4, 4, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, ...
$ segment_id <int> 1, 2, 3, 4, 5, 1, 2, 1, 2, 3, …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个tidyverse
基于数据的工作流,并遇到了一种情况,我有一个具有很多时间间隔的数据框。让我们调用数据框my_time_intervals
,它可以像这样重现:
library(tidyverse)
library(lubridate)
my_time_intervals <- tribble(
~id, ~group, ~start_time, ~end_time,
1L, 1L, ymd_hms("2018-04-12 11:15:03"), ymd_hms("2018-05-14 02:32:10"),
2L, 1L, ymd_hms("2018-07-04 02:53:20"), ymd_hms("2018-07-14 18:09:01"),
3L, 1L, ymd_hms("2018-05-07 13:02:04"), ymd_hms("2018-05-23 08:13:06"),
4L, 2L, ymd_hms("2018-02-28 17:43:29"), ymd_hms("2018-04-20 03:48:40"),
5L, 2L, ymd_hms("2018-04-20 01:19:52"), ymd_hms("2018-08-12 12:56:37"),
6L, 2L, ymd_hms("2018-04-18 20:47:22"), ymd_hms("2018-04-19 16:07:29"),
7L, 2L, ymd_hms("2018-10-02 14:08:03"), ymd_hms("2018-11-08 00:01:23"),
8L, 3L, ymd_hms("2018-03-11 22:30:51"), ymd_hms("2018-10-20 21:01:42")
)
Run Code Online (Sandbox Code Playgroud)
这是tibble
同一数据框的视图:
> my_time_intervals
# A tibble: 8 x 4
id group start_time end_time
<int> <int> …
Run Code Online (Sandbox Code Playgroud)