Как разделить дату и время на 2 столбца, используя программирование на R? - PullRequest
0 голосов
/ 04 ноября 2019

Столбец выглядит следующим образом:

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 $ reports_time: объект типа 'closure'не может быть подмножеством

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

Ошибка в df $ reports_time: объект типа 'closure' не является поднабором

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

Ошибка в данных $ сообщил_time: объект типа 'closure' не является подмножеством

Еще один столбец с именем заголовка «acceptged_on» состоит из той же даты, формата времени.

Попробовал следующее, но не получилось.

Буду признателен за советы любого. Спасибо

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

Ошибка в df $ acceptged_on: объект типа 'closure' не может быть поднабором

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

Ошибка в df $ acceptged_on: объект типа 'closure' не является подмножеством

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

Ошибка: неожиданное ']' в "df $ Date <- lapply (strsplit (as.character (df $ acceptged_on)," ")," [", 1)]" </p>

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

Ошибка: неожиданное ']' в "df $ Time <- lapply (strsplit (as.character (df $ acceptged_on)," ")," [", 2)]" </p>

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

Ошибка в df $ acceptged_on: объект типа «замыкание» не может быть подмножеством

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

Ошибка в df $ acceptged_on: объект типа «закрытие» не является подмножеством

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

Ошибка в df $ acceptged_on: объект типа 'closure' не может быть подмножеством

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

Ошибка в df $ acceptged_on: объект типа 'closure' не является подмножеством

желаемым выходом является (секунды удаляются из времени):

сообщил_тем время 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 5/2/2019 14: 49 5/2/2019 20:22 20/10/2019 20:42 18/09/2019 15:19 10.09.2009 9:11 21/10/2019 08:37 5/2/2019 8:57 2/ 5/2019 12:35 5/2/2019 22: 46

1 Ответ

0 голосов
/ 05 ноября 2019

Понятия не имею, как должен выглядеть ожидаемый результат. Ниже мое решение:

Если у вас есть отчет о времени в виде строки 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, как показано ниже, включая Date иTime:

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
...