【问题标题】:How do I split the date and time into 2 columns using R programming?如何使用 R 编程将日期和时间分成 2 列?
【发布时间】:2020-03-01 00:07:25
【问题描述】:

该列如下所示:

reported_time
3/9/2019 7:07
24/09/2019 08:17:17
3/9/2019 7:27
20/10/2019 08:02:20
2/5/2019 14:15
2/5/2019 14:49
2/5/2019 20:22
20/10/2019 20:42:15
18/09/2019 15:19:20
9/10/2019 9:11
21/10/2019 08:37:05
2/5/2019 8:57
2/5/2019 12:35
2/5/2019 22:46

试了下,还是不行

df$Date <- as.Date(df$reported_time)

df$reported_time 中的错误:“闭包”类型的对象不是子集

df$Time <- format(df$reported_time,"%H:%M:%S")

df$reported_time 中的错误:“闭包”类型的对象不是子集

data$reported_time <- as.POSIXct(as.character(data$reported_time), format =  "%Y%m%d%H%M")

data$reported_time 中的错误:“闭包”类型的对象不是子集

标题名称为“acknowledged_on”的另一列包含相同的日期、时间格式。

尝试了以下方法,但失败了。

感谢任何人的建议。谢谢

df$Date <- lapply(strsplit(as.character(df$acknowledged_on), " "), "[", 1)

df$acknowledged_on 中的错误:“闭包”类型的对象不是子集

df$Time <- lapply(strsplit(as.character(df$acknowledged_on), " "), "[", 2)

df$acknowledged_on 中的错误:“闭包”类型的对象不是子集

df$Date <- lapply(strsplit(as.character(df$acknowledged_on), " "), "[", 1)]

错误:“df$Date

df$Time <- lapply(strsplit(as.character(df$acknowledged_on), " "), "[", 2)]

错误:“df$Time

df$Date <- as.Date(df$acknowledged_on) #already got this one from the answers above

df$acknowledged_on 中的错误:“闭包”类型的对象不是子集

df$Time <- format(as.POSIXct(df$acknowledged_on) ,format = "%H:%M")

df$acknowledged_on 中的错误:“闭包”类型的对象不是子集

df$Date <- as.Date(df$acknowledged_on)

df$acknowledged_on 中的错误:“闭包”类型的对象不是子集

df$Time <- format(df$acknowledged_on,"%H:%M:%S")

df$acknowledged_on 中的错误:“闭包”类型的对象不是子集

期望的输出是(从时间中删除秒数):

reported_time 2019 年 3 月 9 日 7:07 24/09/2019 08:17 2019 年 3 月 9 日 7:27 20/10/2019 08:02 2019 年 2 月 5 日 14:15 2/5/2019 14:49 2019 年 2 月 5 日 20:22 20/10/2019 20:42 18/09/2019 15:19 2019 年 9 月 10 日 9:11 21/10/2019 08:37 2019 年 2 月 5 日 8:57 2019 年 2 月 5 日 12:35 2/5/2019 22:46

【问题讨论】:

  • 如果您想获得答案,您应该使用您使用的语言 (R) 标记您的问题。我已经为你做到了。
  • 感谢您的多次尝试,您很接近。试试这个:data$reported_time &lt;- as.POSIXct( as.character(data$reported_time), format = "%m/%d/%Y %H:%M")。我建议不要将日期和时间分开,而是在报告时使用format 函数来控制输出。

标签: r date time split


【解决方案1】:

我不知道预期的输出应该是什么样子。以下是我的解决方案:

假设您将时间报告作为字符串s,例如

s <- "3/9/2019 7:07 24/09/2019 08:17:17 3/9/2019 7:27 20/10/2019 08:02:20 2/5/2019 14:15 2/5/2019 14:49 2/5/2019 20:22 20/10/2019 20:42:15 18/09/2019 15:19:20 9/10/2019 9:11 21/10/2019 08:37:05 2/5/2019 8:57 2/5/2019 12:35 2/5/2019 22:46"

然后你可以产生一个data.frame如下,包括DateTime

v <- gsub("(.*):\\d{2}","\\1",sapply(unlist(regmatches(s,gregexpr("([0-9/]+)(\\s)([0-9:/]+)",s))),function(x) format(as.POSIXct(x,tz="",tryFormats = c("%d/%m/%Y %H:%M"), "%d/%m/%Y %H:%M")),USE.NAMES = F))
df <- data.frame(reported_time = v, Date = gsub("([0-9/]+)(\\s.*)","\\1",v), Time = gsub("(.*\\s)([0-9:/]+)","\\2",v))

输出的样子:

> df
      reported_time       Date  Time
1  2019-09-03 07:07 2019-09-03 07:07
2  2019-09-24 08:17 2019-09-24 08:17
3  2019-09-03 07:27 2019-09-03 07:27
4  2019-10-20 08:02 2019-10-20 08:02
5  2019-05-02 14:15 2019-05-02 14:15
6  2019-05-02 14:49 2019-05-02 14:49
7  2019-05-02 20:22 2019-05-02 20:22
8  2019-10-20 20:42 2019-10-20 20:42
9  2019-09-18 15:19 2019-09-18 15:19
10 2019-10-09 09:11 2019-10-09 09:11
11 2019-10-21 08:37 2019-10-21 08:37
12 2019-05-02 08:57 2019-05-02 08:57
13 2019-05-02 12:35 2019-05-02 12:35
14 2019-05-02 22:46 2019-05-02 22:46

【讨论】:

  • 大家好,非常感谢您的建议。但是,我仍然没有像你们那样得到格式
  • > data$reported_time
  • 为此:v
  • 期望的输出是标准化日期和时间格式。我需要像这样从时间数据中删除秒数:08:17 报告时间 3/9/2019 7:07 24/09/2019 08:17 3/9/2019 7:27 20/10/2019 08: 02 2/5/2019 14:15 2/5/2019 14:49 2/5/2019 20:22 20/10/2019 20:42 18/09/2019 15:19 9/10/2019 9:11 21 /10/2019 08:37 2/5/2019 8:57 2/5/2019 12:35 2/5/2019 22:46
  • 嗨@Newbie101,我根据你的信息更新了我的解决方案,其中reported_time作为第一列插入,秒数从数据框中删除df
猜你喜欢
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 2022-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多