标签: lubridate

在 R 中,如何以 yyyymmdd 格式输出 lubridate 兼容日期?相当于 .NET 中的 .ToString("yyyyMMdd") 吗?

在 中R,我可以使用以下方法将日期解析为 Lubridate 格式:

d <- ymd("2013-02-15")
Run Code Online (Sandbox Code Playgroud)

我如何以yyyyMMdd格式输出它,例如:

20130215
Run Code Online (Sandbox Code Playgroud)

等效的 .NET 命令是:

.ToString("yyyyMMdd")
Run Code Online (Sandbox Code Playgroud)

我知道这个问题的答案很简单,但我花了最后一个小时试图找到任何有关使用 Lubridate 输出日期的参考,但到目前为止尚未成功。

.net c# r lubridate

6
推荐指数
1
解决办法
2533
查看次数

R:如何按小时和分钟过滤时间戳?

我正在为以下示例而苦苦挣扎

time = c('2013-01-03 21:59:21.549', '2013-01-04 22:00:21.549', '2013-01-05 22:01:21.222', '2013-01-06 22:06:23.559' )
value = c(1,2,3,4)

data <- data_frame(time, value)
data <-data %>%  mutate(time = ymd_hms(time))

> data
# A tibble: 4 × 2
                 time value
               <dttm> <dbl>
1 2013-01-03 21:59:21     1
2 2013-01-04 22:00:21     2
3 2013-01-05 22:01:21     3
4 2013-01-06 22:06:23     4
Run Code Online (Sandbox Code Playgroud)

我怎样才能写出一份dplyr::filter声明,而不是每天只保留21:5922:01(包括)之间的观察结果?

hour(time)和分开玩minute(time)在这里似乎不太好。

我在这里错过了什么吗?

预期输出:仅第 1,2 和 3 行。谢谢!

datetime r lubridate dplyr

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

R - lubridate - 将 Period 转换为数字计数月份

考虑以下事项:

library(lubridate)
period1 = weeks(2)
as.numeric(period1, "weeks")
> 2   # as expected 
Run Code Online (Sandbox Code Playgroud)

现在我试图用几个月做类似的事情:

period2= months(6)
as.numeric(period2, "months")
as.numeric(period2, "weeks")
>  26.08929  # OK
as.numeric(period2,"months")
>  0.04166667  # Not OK?
Run Code Online (Sandbox Code Playgroud)

这是一个错误lubridate吗?或者我做错了什么/错过了什么?

注意:我看过(旧)评论Have lubridate减法只返回一个数值,所以我想我也可以使用解决方法来使用,difftime但我想坚持使用lubridate。

r lubridate

6
推荐指数
1
解决办法
2808
查看次数

如何从R中的日期中提取月份和日期并将其转换为日期类型?

Rstudio参加我的R会议,我有以下R代码:

d1 <- read.csv("mydata.csv", stringsAsFactors = FALSE, header = TRUE)

d2 <- d1 %>% 
      mutate(PickUpDate = ymd(PickUpDate))

str(d2$PickUpDate)
Run Code Online (Sandbox Code Playgroud)

上面最后一行代码的输出如下:

Date[1:14258], format: "2016-10-21" "2016-07-15" "2016-07-01" "2016-07-01" "2016-07-01" "2016-07-01" ...
Run Code Online (Sandbox Code Playgroud)

我需要在 中添加一个附加列(我们称之为MthDDdataframe d2,这将是“ ”列的月份和日期PickUpDate。因此,列MthDD需要采用格式mm-dd,但最重要的是,它仍然应该是date type.

我怎样才能实现这个目标?

更新:我已尝试以下操作,但它将新列输出为字符类型。我需要该列为日期类型,以便我可以将其用作绘图的 x 轴组件。

d2$MthDD <- format(as.Date(d2$PickUpDate), "%m-%d")
Run Code Online (Sandbox Code Playgroud)

r date lubridate

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

在时间轴上设置休息间隔

首先让我们创建一些示例数据。时间使用lubridate's存储,hm因为这似乎最合适。

library(tibble)
library(lubridate)
#> 
#> Attaching package: 'lubridate'
#> The following object is masked from 'package:base':
#> 
#>     date

(
  data <- tibble(
    Time = hm('09:00', '10:30'),
    Value = 1
  )
)
#> # A tibble: 2 x 2
#>   Time         Value
#>   <S4: Period> <dbl>
#> 1 9H 0M 0S         1
#> 2 10H 30M 0S       1
Run Code Online (Sandbox Code Playgroud)

这是我希望情节的样子。现在,我已经以半小时为间隔手动指定了休息时间。

library(ggplot2)
library(scales)

ggplot(data, aes(Time, Value)) +
  geom_point() +
  scale_x_time(breaks = hm('09:00', '09:30', '10:00', '10:30'))
Run Code Online (Sandbox Code Playgroud)

我想每隔半小时自动创建这些休息时间。尝试使用scales::date_breaks …

r ggplot2 lubridate

6
推荐指数
2
解决办法
3973
查看次数

R lubridate包日期时间创建省略了午夜时间

我正在尝试使用 lubridate 包创建日期时间,并且我尝试了以下值:

library(lubridate)
ymd_hms("2017-07-02 23:00:00")
[1] "2017-07-02 23:00:00 UTC"
ymd_hms("2017-07-02 00:00:00")
[1] "2017-07-02 UTC"
Run Code Online (Sandbox Code Playgroud)

看起来,如果您输入午夜时间 00:00:00,ymd_hms() 方法会忽略时间值,结果会变成日期。有什么办法可以在结果中显示 00:00:00 吗?多谢!

datetime r lubridate

6
推荐指数
1
解决办法
1858
查看次数

R lubridate ymd_hms 毫秒差异

我在时间转换中遗漏了什么吗?非常简单的例子:

library(lubridate)
time <- "2019-01-14 10:58:23.438000"

op <- options(digits.secs=6)
ymd_hms(time, tz = "Europe/Helsinki")
[1] "2019-01-14 10:58:23.437 EET"

ymd_hms(time)
[1] "2019-01-14 10:58:23.437 UTC"
Run Code Online (Sandbox Code Playgroud)

为什么这里的毫秒数是一秒?似乎不是四舍五入的问题?

虽然这似乎有效:

time <- "2019-01-14 10:58:23.123456"

op <- options(digits.secs=6)

ymd_hms(time)
[1] "2019-01-14 10:58:23.123456 UTC"
Run Code Online (Sandbox Code Playgroud)

会话信息

sessionInfo()
R version 3.5.1 (2018-07-02)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

Matrix products: default

locale:
[1] LC_COLLATE=Finnish_Finland.1252  LC_CTYPE=Finnish_Finland.1252    LC_MONETARY=Finnish_Finland.1252 LC_NUMERIC=C                    
[5] LC_TIME=Finnish_Finland.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] lubridate_1.7.4 …
Run Code Online (Sandbox Code Playgroud)

r lubridate

6
推荐指数
1
解决办法
2305
查看次数

如何使用一些内置的包函数从 R 中的日期时间向量获取准确的季节(秋季、冬季、春季和夏季)?

我需要使用日期时间列获取数据集的确切季节(秋季冬季春季夏季"POSIXct" "POSIXt"

重要的是要考虑到季节取决于地球上的春分和至日,而且季节发生的确切时间会随着时间的推移以及纬度和经度位置而变化。因此,这并不像为所有年份的所有春分和至日定义相同的日期和时间那么简单。

下面的表格显示了多年来的这种变化:http://www.astropixels.com/ephemeris/soleq2001.html

R 包中有没有内置函数可以实现这一点?

下面是一个起点:

# Load packages
library(lubridate)
library(dplyr)

# Create dummy df with datetime col 
df <- data.frame(datetimes = seq(as.POSIXct("2016-01-01 00:00:00", tz = "UTC"),
                             as.POSIXct("2019-12-31 23:59:59", tz="UTC"),
                             by = "hour"))

# Calculate season in a fix position given by lon, lat pairs
df2 <- 
  df %>%
  mutate(season = datetimeToExactSeason(datetimes))
Run Code Online (Sandbox Code Playgroud)

datetime r astronomy lubridate

6
推荐指数
0
解决办法
618
查看次数

从纬度和经度 R 转换为本地时区

我有一个包含很多位置(大约 30.000 个)的数据框,我需要将每个位置的时间转换为当地时间。\n我尝试了一些想法,例如这个这个。但他们不适合我。

\n\n

我有这样的数据:

\n\n
dt = data.table(date = c("2018-01-16 22:02:37",\n                         "2018-01-16 22:54:00", \n                         "2018-01-16 23:08:38"),\n                lat = c(-54.5010,\n                        -54.5246,\n                        -54.5285),\n                long = c(-25.0433, \n                         -25.0929,\n                         -25.0832))\n
Run Code Online (Sandbox Code Playgroud)\n\n

我期望这个输出:

\n\n
date                      lat           long\n2018-01-16 20:02:37       -54.5010      -25.0433\n2018-01-16 20:54:00       -54.5246      -25.0929\n2018-01-16 21:08:38       -54.5285      -25.0832\n
Run Code Online (Sandbox Code Playgroud)\n\n

一试:

\n\n
library(sf)\ndt = data.table(date = c("2018-01-16 22:02:37",\n                         "2018-01-16 22:54:00", \n                         "2018-01-16 23:08:38"),\n                lat = c(-54.5010,\n                        -54.5246,\n                        -54.5285),\n                long = c(-25.0433, \n                         -25.0929,\n                         -25.0832))\n\nsdf = st_as_sf(dt, coords = c("long", "lat"), crs = …
Run Code Online (Sandbox Code Playgroud)

timezone r localtime latitude-longitude lubridate

6
推荐指数
1
解决办法
2236
查看次数

有效地找到R中两个时间间隔之间的重叠

我曾经使用packagecombn()来查找两个日期/时间之间的重叠。但处理我正在处理的大型数据集太慢了我正在尝试从包中使用,但无法让它工作。任何帮助,将不胜感激。如果您知道我应该查看的任何其他包/功能,也请告诉我。lubridatecombn()comboGeneral()RcppAlgos

get_overlap <- function(.data, .id, .start, .end) {
  id <- .data[[.id]]
  int <- interval(.data[[.start]], .data[[.end]])
  names <- combn(id, 2, FUN = function(.) paste(., collapse = "-"))
  setNames(combn(int, 2, function(.) intersect(.[1], .[2])), names)
}

get_overlap(dat, "id", "start", "end")
# a-b a-c a-d a-e b-c b-d b-e c-d c-e d-e 
#  49   1   4  17  23  14  18  NA   2  NA 
Run Code Online (Sandbox Code Playgroud)

这是我使用失败的尝试comboGeneral()

comboGeneral(dat$int, 2, FUN = function(.) intersect(.[1], .[2]))

# Output: …
Run Code Online (Sandbox Code Playgroud)

r lubridate combn

6
推荐指数
1
解决办法
2137
查看次数

标签 统计

lubridate ×10

r ×10

datetime ×3

.net ×1

astronomy ×1

c# ×1

combn ×1

date ×1

dplyr ×1

ggplot2 ×1

latitude-longitude ×1

localtime ×1

timezone ×1