【问题标题】:Dealing with non-standard time data处理非标准时间数据
【发布时间】:2017-05-09 21:41:11
【问题描述】:

我有一些时间数据作为数据集的一部分——我们称之为 df,它的格式使操作变得困难。我们称这个时间变量为“时间”。以下是一些数据示例:

df$time
12/17/2012
1945
1950
2032
2/24/2012
2206
2209
2211

如您所见,时间变量列以给定日期 (mm/dd/yyyy) 开头,然后是给定事件在同一日期发生的时间 (hhmm)。

是否可以将月、日和年的值“进位”到相应的小时和时间值?我希望我的数据最终看起来像这样:

df$time
12/17/2012 19:45
12/17/2012 19:50
12/17/2012 20:32
2/24/2012  22:06
2/24/2012  22:09
2/24/2012  22:11

谢谢!

【问题讨论】:

  • 你能更好地解释一下小时/分钟数据吗?它从何而来?此外,在某些行中,您只有年或日/月的组合,这意味着如果我正确理解您的问题,就不可能获得统一的 D/M/Y/H/S 格式。
  • @Prometheus 带有斜线的条目是日期,每个日期下面的四位数字是时间(尽管没有冒号)。因此 df$time 下的第三行将是 2012 年 12 月 17 日 19:50。

标签: r date time lubridate


【解决方案1】:

首先将您的时间格式转换为:

time=gsub("^(\\d{2})(\\d{2})$","\\1:\\2",time)

然后定位日期的位置:

pos=grep("\\d+/\\d+/\\d+",time)

然后构造你的结果向量:

dates=rep(time[pos],times=(diff(c(pos,length(time)+1))-1))
hours=time[-pos]
time=paste(dates,hours)

最后,如果你需要,你可以将其转换为POSIXct

time=as.POSIXct(time,format="%m/%d/%Y %H:%M")

【讨论】:

  • 这似乎工作得很好,谢谢!我必须阅读正则表达式。
【解决方案2】:

使用来自zoona.locfdplyr 样式答案。他的作品通过“/”的存在将日期和时间分成单独的列,将日期与na.locf 结转,过滤掉原始日期行,将列粘贴在一起,并将其转换为POSIXct

df <- read.table(text=
"12/17/2012
1945
1950
2032
2/24/2012
2206
2209
2211
", stringsAsFactors = FALSE)
names(df) <- "original_time"

library(dplyr)
library(stringr)
library(zoo)

df %>% 
  mutate(event_date = if_else(str_detect(original_time, "/"), original_time, as.character(NA)),
         event_time = if_else(str_detect(original_time, "/"), as.character(NA), original_time),
         event_date = na.locf(event_date)) %>%
  filter(!is.na(event_time)) %>%
  mutate(event_date_time = paste(event_date, event_time),
         event_date_time = as.POSIXct(event_date_time, format="%m/%d/%Y %H%M")) %>%
  select(event_date_time)

# event_date_time
# 1 2012-12-17 19:45:00
# 2 2012-12-17 19:50:00
# 3 2012-12-17 20:32:00
# 4 2012-02-24 22:06:00
# 5 2012-02-24 22:09:00
# 6 2012-02-24 22:11:00

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-28
    • 2010-10-22
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 2021-08-09
    • 2013-02-03
    • 2021-05-28
    相关资源
    最近更新 更多