Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在tidyverse中将列拆分为日期/时间_R_Date_Split_Tidyverse - Fatal编程技术网

在tidyverse中将列拆分为日期/时间

在tidyverse中将列拆分为日期/时间,r,date,split,tidyverse,R,Date,Split,Tidyverse,我承认存在多个类似的问题,但到目前为止,我没有找到一个对我有效的答案,可能是因为AM/PM。我不想删除后者 我有一个列Trip Start Timestamp,如下所示 12/01/2019 12:30:00 AM 12/01/2019 12:31:00 AM 12/01/2019 12:32:00 AM 我试图删除am/PM,并将其分为两个变量:开始日期和开始时间 理想输出: Start date Start time 12/01/2019 12:30:00 AM 我想把它读成时间序列

我承认存在多个类似的问题,但到目前为止,我没有找到一个对我有效的答案,可能是因为AM/PM。我不想删除后者

我有一个列Trip Start Timestamp,如下所示

12/01/2019 12:30:00 AM
12/01/2019 12:31:00 AM
12/01/2019 12:32:00 AM 
我试图删除am/PM,并将其分为两个变量:开始日期和开始时间

理想输出:

Start date Start time
12/01/2019 12:30:00 AM
我想把它读成时间序列

到目前为止我最好的猜测是

Date <- format(as.POSIXct(strptime(taxi_2020$`Trip Start Timestamp`, "%d/%m/%Y %H:%M:S")), format = "%m/%d/%Y")
Time <- format(as.POSIXct(strptime(taxi_2020$`Trip Start Timestamp`, "%d/%m/%Y %H:%M:S")), format = "%H:%M:S")
head(Date)
head(Time)
更新

看起来带有时间和日期的列在格式上有一些问题

可以找到dput

到目前为止,@Ronak Shah的解决方案仍然有效。从技术上讲,我最终分离了数据,但可能发现了另一个问题

三角帆 dat%>% 变异 选择1 psx=as.POSIXctV1,格式=%m/%d/%Y%I:%m:%S%p,tz=UTC, 日期=formatpsx,格式=%m/%d/%Y, 时间=formatpsx,格式=%I:%M:%S%p, 选择2 Date2=sub\\s.*,V1, Time2=sub^\\S*\\S,V1 V1 psx日期时间日期2时间2 2019年1月12日12:30:00 2019年12月12日12:30:00 2019年1月12日12:30:00 2019年1月12日12:30:00 2019年12月1日12:31:00 AM 2019-12-01 12:31:00 2019年1月12日12:31:00 PM 2019年1月12日12:31:00 AM 3 2019年1月12日12:32:00 AM 2019-12-01 12:32:00 2019年1月12日12:32:00 PM 2019年1月12日12:32:00 AM 资料

蒂迪维尔酒店 dat%>% 变异 选择1 psx=as.POSIXctV1,格式=%m/%d/%Y%I:%m:%S%p,tz=UTC, 日期=formatpsx,格式=%m/%d/%Y, 时间=formatpsx,格式=%I:%M:%S%p, 选择2 Date2=sub\\s.*,V1, Time2=sub^\\S*\\S,V1 V1 psx日期时间日期2时间2 2019年1月12日12:30:00 2019年12月12日12:30:00 2019年1月12日12:30:00 2019年1月12日12:30:00 2019年12月1日12:31:00 AM 2019-12-01 12:31:00 2019年1月12日12:31:00 PM 2019年1月12日12:31:00 AM 3 2019年1月12日12:32:00 AM 2019-12-01 12:32:00 2019年1月12日12:32:00 PM 2019年1月12日12:32:00 AM 资料


dat既然您用tidyverse标记了它,下面是一个使用lubridate的简单方法:

示例数据


由于您使用tidyverse标记了此项,因此使用lubridate有一个简单的方法:

示例数据


请注意,将输出保持为所显示的格式将返回作为字符/因子的列

您可以使用tidyr::separate在空白处分割数据

类似地,您可以使用extract:


请注意,将输出保持为所显示的格式将返回作为字符/因子的列

您可以使用tidyr::separate在空白处分割数据

类似地,您可以使用extract:

我们可以用基数R来分割

数据 我们可以用基数R来分割

数据
非常感谢,您是tidyverse中的第一个,因此我将接受您的回答。错误:列时间必须为4137294行数或1行数,而不是3行数。代码现在可以工作了,但初始列Trip Start Timestamp现在为NA,新列也为NA。日期是NA,时间是NAI,我想知道是否存在某种因素问题。你能用dputtaxi_2020[1:20,]的输出来发布你的帖子吗?真的很晚了,如果明天有人帮不了你,我就去看看。好了,太大了。我打开谷歌硬盘。肯定是一些格式问题,我也不能用Python阅读,这给了我一些字符的错误。谢谢非常感谢,您是tidyverse中的第一个,因此我将接受您的回答。错误:列时间必须为4137294行数或1行数,而不是3行数。代码现在可以工作了,但初始列Trip Start Timestamp现在为NA,新列也为NA。日期是NA,时间是NAI,我想知道是否存在某种因素问题。你能用dputtaxi_2020[1:20,]的输出来发布你的帖子吗?真的很晚了,如果明天有人帮不了你,我就去看看。好了,太大了。我打开谷歌硬盘。肯定是一些格式问题,我也不能用Python阅读,这给了我一些字符的错误。谢谢但是第一个代码返回列,因为所有NAs都将使用字符。知道为什么吗?@Rookie你的数据一定不一样。我用的是伊恩的数据。你能用这些数据测试一下吗?不幸的是,这不起作用。错误:列时间的长度必须为4137294行数或一行,而不是一行3@Rookie在您的dput中,我认为相关部分仅为structurelist`Trip Start Timestamp`=c12/01/2019 12:15:00 AM、12/01/2019 12:15:00 AM、12/01/2019 12:15:00 AM、`Trip End Timestamp`=c12/01/2019 12:30:00 AM、12/01/2019 12:15:00 AM、12/01/2019 12:30:00 AM、,row.names=cNA,-3L,class=ctbl_df,tbl,data.frame。其余的都没有被捡起来?对于这些数据,我的答案对我来说很好。@Rookie我的答案对你更新的数据对我来说仍然很好。它对您有用吗?但是第一个代码返回列,因为所有NAs都将使用字符。知道为什么吗?@Rookie你的数据一定不一样。我用的是伊恩的数据。你能测试一下吗
不幸的是,这些数据不起作用。错误:列时间的长度必须为4137294行数或一行,而不是一行3@Rookie在您的dput中,我认为相关部分仅为structurelist`Trip Start Timestamp`=c12/01/2019 12:15:00 AM、12/01/2019 12:15:00 AM、12/01/2019 12:15:00 AM、`Trip End Timestamp`=c12/01/2019 12:30:00 AM、12/01/2019 12:15:00 AM、12/01/2019 12:30:00 AM、,row.names=cNA,-3L,class=ctbl_df,tbl,data.frame。其余的都没有被捡起来?对于这些数据,我的答案对我来说很好。@Rookie我的答案对你更新的数据对我来说仍然很好。它对您有用吗?但它在数据[[1]]中给了我错误:“closure”类型的对象不可用subsettable@Rookie你能查一下你的数据吗。我假设它是一个data.frame或tibble,因为它应该与那些结构stibble[4137294 x 21]S3:tbl_df/tbl/data.frame$开始日期:chr[1:4137294]12/01/2019 12/01/2019 12/01/2019 12/01/2019…$开始时间:chr[1:4137294]12:15:00 AM 12:15:00 AM 12:15:00 AM 12:15:00 AM…$截止日期:chr[1:4137294]2019年1月12日2019年1月12日2019年1月12日2019年1月12日…$结束时间:chr[1:4137294]12:30:00 AM 12:15:00 AM 12:30:00 AM 12:30:00 AM…@菜鸟你在开始时间分手吗?在这种情况下,使用strsplitdata[[Start Time]],…@Rookie根据图像,行程结束时间戳是第3列。因此,您可能需要strsplittaxi_2020_test[[Trip End Timestamp]],…但它在数据[[1]]中给了我错误:“closure”类型的对象不是subsettable@Rookie你能查一下你的数据吗。我假设它是一个data.frame或tibble,因为它应该与那些结构stibble[4137294 x 21]S3:tbl_df/tbl/data.frame$开始日期:chr[1:4137294]12/01/2019 12/01/2019 12/01/2019 12/01/2019…$开始时间:chr[1:4137294]12:15:00 AM 12:15:00 AM 12:15:00 AM 12:15:00 AM…$截止日期:chr[1:4137294]2019年1月12日2019年1月12日2019年1月12日2019年1月12日…$结束时间:chr[1:4137294]12:30:00 AM 12:15:00 AM 12:30:00 AM 12:30:00 AM…@菜鸟你在开始时间分手吗?在这种情况下,使用strsplitdata[[Start Time]],…@Rookie根据图像,行程结束时间戳是第3列。因此,您可能需要strsplittaxi_2020_test[[Trip End Timestamp]]。。。
[1] NA NA NA NA NA NA
[1] NA NA NA NA NA NA
library(dplyr)
library(lubridate)
data %>%
  mutate(Date = as.Date(mdy_hms(`Trip Start Timestamp`)), 
         Time = format(mdy_hms(`Trip Start Timestamp`), "%I:%M:%S %p"))
#    Trip Start Timestamp       Date        Time
#1 12/01/2019 12:30:00 AM 2019-12-01 12:30:00 AM
#2 12/01/2019 12:31:00 AM 2019-12-01 12:31:00 AM
#3 12/01/2019 12:32:00 AM 2019-12-01 12:32:00 AM
data <- structure(list(`Trip Start Timestamp` = c("12/01/2019 12:30:00 AM", 
"12/01/2019 12:31:00 AM", "12/01/2019 12:32:00 AM")), class = "data.frame", row.names = c(NA, 
-3L))
tidyr::separate(data, `Trip Start Timestamp`, c('Start Date', 'Start Time'), 
                       sep = ' ', extra = 'merge')

#  Start Date  Start Time
#1 12/01/2019 12:30:00 AM
#2 12/01/2019 12:31:00 AM
#3 12/01/2019 12:32:00 AM
tidyr::extract(data, `Trip Start Timestamp`, c('Start Date', 'Start Time'), 
               regex = '(.*?)\\s(.*)')
out <- do.call(rbind.data.frame, strsplit(data[[1]],
        "(?<=[0-9]) (?=[0-9])", perl = TRUE))
names(out) <- c('Start Date', 'Start Time')
out
#  Start Date  Start Time
#1 12/01/2019 12:30:00 AM
#2 12/01/2019 12:31:00 AM
#3 12/01/2019 12:32:00 AM
data <- structure(list(`Trip Start Timestamp` = c("12/01/2019 12:30:00 AM", 
"12/01/2019 12:31:00 AM", "12/01/2019 12:32:00 AM")), class = "data.frame", row.names = c(NA, 
-3L))