【问题标题】:subset data.frame using POSIXct vector R使用 POSIXct 向量 R 的子集 data.frame
【发布时间】:2017-12-05 23:03:14
【问题描述】:

我正在尝试从数据框中提取一系列 POSIXct 日期

带有样本数据框(data)...

library(lubridate)
start <- as.POSIXct('2016-10-08 20:00:00')  
time <- seq(start, start + days(1), by = "30 min")  
variable <- sample(seq(from = 20, to = 50), size = 49, replace = TRUE)  
data <- data.frame(time, variable)  

我正在尝试使用单个日期和范围创建日期的索引向量。我最初打算对数据框进行子集化,然后使用$ 运算符提取日期列(尽管我确信有一种更优雅的方法)。

data_trim <- data[c('2016-10-08 20:00:00', '2016-10-08 22:0:00' %--% '2016-
10-09 13:00:00'),]

但输出是

     time variable
NA   <NA>       NA
NA.1 <NA>       NA

有人有什么建议吗?

谢谢

【问题讨论】:

  • 你加载了哪些库?我不相信 base R 有 days() fn,我得到了一个错误。
  • 您能告诉我们您使用的包%--% 年龄吗? Base 没有 days() 也没有 %--% 指令...
  • 当然,抱歉,我没有包括 - %--% 来自 lubridate。我也在使用 dplyr。

标签: r


【解决方案1】:

这是您想要达到的目标吗?如果您在其他地方不需要 lubridate,可以将 days(1) 替换为 60 * 60 * 24(秒 * 分钟 * 小时)。

编辑: 更改为仅提取时间向量。

start <- as.POSIXct('2016-10-08 20:00:00')  
time <- seq(start, start + 60 * 60 * 24, by = "30 min")  
variable <- sample(seq(from = 20, to = 50), size = 49, replace = TRUE)  
data <- data.frame(time, variable)  

# If you wanted to keep the data.frame
# data_trim <- data[data$time == '2016-10-08 20:00:00' |
#                     (data$time >= '2016-10-08 22:0:00' &
#                        data$time <= '2016-10-09 13:00:00'), ]
# data_trim

# Otherwise just extract the time column into a vector
data$time[data$time == '2016-10-08 20:00:00' |
            (data$time >= '2016-10-08 22:0:00' &
               data$time <= '2016-10-09 13:00:00')]
#>  [1] "2016-10-08 20:00:00 NZDT" "2016-10-08 22:00:00 NZDT"
#>  [3] "2016-10-08 22:30:00 NZDT" "2016-10-08 23:00:00 NZDT"
#>  [5] "2016-10-08 23:30:00 NZDT" "2016-10-09 00:00:00 NZDT"
#>  [7] "2016-10-09 00:30:00 NZDT" "2016-10-09 01:00:00 NZDT"
#>  [9] "2016-10-09 01:30:00 NZDT" "2016-10-09 02:00:00 NZDT"
#> [11] "2016-10-09 02:30:00 NZDT" "2016-10-09 03:00:00 NZDT"
#> [13] "2016-10-09 03:30:00 NZDT" "2016-10-09 04:00:00 NZDT"
#> [15] "2016-10-09 04:30:00 NZDT" "2016-10-09 05:00:00 NZDT"
#> [17] "2016-10-09 05:30:00 NZDT" "2016-10-09 06:00:00 NZDT"
#> [19] "2016-10-09 06:30:00 NZDT" "2016-10-09 07:00:00 NZDT"
#> [21] "2016-10-09 07:30:00 NZDT" "2016-10-09 08:00:00 NZDT"
#> [23] "2016-10-09 08:30:00 NZDT" "2016-10-09 09:00:00 NZDT"
#> [25] "2016-10-09 09:30:00 NZDT" "2016-10-09 10:00:00 NZDT"
#> [27] "2016-10-09 10:30:00 NZDT" "2016-10-09 11:00:00 NZDT"
#> [29] "2016-10-09 11:30:00 NZDT" "2016-10-09 12:00:00 NZDT"
#> [31] "2016-10-09 12:30:00 NZDT" "2016-10-09 13:00:00 NZDT"

【讨论】:

  • 谢谢@hrabel - 应该这样做。是的,我只是出于说明目的使用 lubridate。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多