【问题标题】:Subsetting data between 13:30:00 and 13:32:00 works on mac but not on windows, why?13:30:00 和 13:32:00 之间的子集数据在 mac 上有效,但在 windows 上无效,为什么?
【发布时间】:2019-07-11 17:35:39
【问题描述】:

我有一些时间序列的 CO2 浓度。我正在尝试在 13:30:00 和 13:32:00 之间提取数据,但它不适用于 Windows。

 head(df)
# A tibble: 6 x 6
# Groups: Sensor [1]
  Sensor Date       Time   CO2.ppm. Type   calCO2
  <fctr> <date>     <time>    <dbl> <chr>   <dbl>
1 N1     2019-02-12 13:30       583 Naveed    400
2 N1     2019-02-12 13:30       583 Naveed    400
3 N1     2019-02-12 13:30       583 Naveed    400
4 N1     2019-02-12 13:31       583 Naveed    400
5 N1     2019-02-12 13:32       583 Naveed    400
6 N1     2019-02-12 13:33       583 Naveed    400

这适用于mac,但不适用于windows,有什么想法吗?:

require(lubridate)
#require(tidyverse) 

subset(df,Time>=hms("13:30:00") & Time < hms("13:32:00"))

【问题讨论】:

  • 尝试使用dplyr::filter 而不是subset
  • 谢谢 patL,你能详细说明一下吗?

标签: r date time subset


【解决方案1】:

然后您可以使用as.POSIXct() 创建日期/时间列和子集。

d$Date.px <- as.POSIXct(paste(d$Date, d$Time))
subset <- d[d$Date.px < as.POSIXct("2019-02-12 13:32"), ]
# > subset
#   Sensor       Date  Time CO2.ppm.   Type calCO2             Date.px
# 2     N1 2019-02-12 13:30      583 Naveed    400 2019-02-12 13:30:00
# 3     N1 2019-02-12 13:30      583 Naveed    400 2019-02-12 13:30:00
# 4     N1 2019-02-12 13:30      583 Naveed    400 2019-02-12 13:30:00
# 5     N1 2019-02-12 13:31      583 Naveed    400 2019-02-12 13:31:00

数据

d <- structure(list(Sensor = structure(c(2L, 2L, 2L, 2L, 2L, 2L), .Label = c("<fctr>", 
"N1"), class = "factor"), Date = structure(c(2L, 2L, 2L, 2L, 
2L, 2L), .Label = c("<date>", "2019-02-12"), class = "factor"), 
    Time = structure(c(2L, 2L, 2L, 3L, 4L, 5L), .Label = c("<time>", 
    "13:30", "13:31", "13:32", "13:33"), class = "factor"), CO2.ppm. = structure(c(2L, 
    2L, 2L, 2L, 2L, 2L), .Label = c("<dbl>", "583"), class = "factor"), 
    Type = structure(c(2L, 2L, 2L, 2L, 2L, 2L), .Label = c("<chr>", 
    "Naveed"), class = "factor"), calCO2 = structure(c(2L, 2L, 
    2L, 2L, 2L, 2L), .Label = c("<dbl>", "400"), class = "factor"), 
    Date.px = structure(c(1549974600, 1549974600, 1549974600, 
    1549974660, 1549974720, 1549974780), class = c("POSIXct", 
    "POSIXt"), tzone = "")), row.names = 2:7, class = "data.frame")

【讨论】:

  • 感谢您的解决方案!你能详细说明为什么我需要一起解析日期和时间来实现这一点吗?另外,为什么你认为我上面的功能在 mac 上有效,而在 windows 上无效?
  • 欢迎您!由于我在 windows 或 linux 机器上工作,我不确定为什么你的代码不能在 mac 上运行。 lubridate 包中的某些内容可能与 mac 不协调。因此,我给了你一个基本的 R 解决方案,我们 AFAIK 通常使用组合的日期/时间格式,并且根本不存在单一的时间格式,因为它本身并不是明确的。这对你有意义吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-20
相关资源
最近更新 更多