分割日期时间

Jal*_*ala 22 datetime split r

我有一个名为"开始"的列日期时间(DD:MM:yyyy HH:mm:ss)的df,我想将此列拆分为两个名为"date"和"time"的列.
现在我尝试了以下内容:

df$Date <- sapply(strsplit(as.character(df$Start), " "), "[", 1)
df$Time <- sapply(strsplit(as.character(df$Start), " "), "[", 2)
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用函数str(df)(我将其缩短以便您可以看到我关注的变量),这是有效的.

'data.frame':18363 obs.19变量:
$开始:因子w/67级别"2013-09-01 08:07:41.000",..:1 1 1 1 1 1 1 1 1 ...
$ Interval:int 47259 47259 47259 47259 47259 47259 47259 47259 47259 47259 ...
$日期时间:因子w/18363水平"2013-09-01 08:07:41.350",..:1 2 3 4 5 6 7 8 9 10 ...
$ TimeSensor:num 158489 158489 158490 158490 158491 ...


所以现在我只需要知道如何将时间和日期从'因素'转换为'时间'和'日期'.

如果有人知道解决方案,我将非常感激!我是一个关于R的菜鸟,所以请不要把我烧到地上..

太感谢了!

Geo*_*lom 24

怎么样

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

df$Time <- format(df$Start,"%H:%M:%S")
Run Code Online (Sandbox Code Playgroud)

  • strptime(as.character(df $ Start),"%Y-%m-%d%H:%M:%S")? (3认同)
  • 您有“字符”类型的 df$Start,它不是时间戳。使用 class() 函数进行检查。在应用上述函数之前,您应该将字符串转换为时间戳。 (2认同)

Jal*_*ala 13

对不起这个迟到的答案!无论如何,我从大学的某个人那里得到了帮助,他提出了以下非常简单的调整我的时间码...:

df$Date <- as.Date(df$Start) #already got this one from the answers above
df$Time <- format(as.POSIXct(df$Start) ,format = "%H:%M:%S") 
Run Code Online (Sandbox Code Playgroud)

这会将因子转换为"date"和"POSIXct",这就是我想要的.

感谢大家的帮助!我希望将来可以得到一些帮助,虽然我怀疑它是否会与编程有关......


Ron*_*hah 6

假设您的数据与一datetime列和许多其他列类似

df <- data.frame(a = 1:5, datetime = as.POSIXct(c('2019-02-01 01:00:00', 
                 '2019-02-01 02:00:00', '2019-02-01 03:00:00', 
                 '2019-02-01 04:00:00', '2019-02-01 05:00:00')))

df
#  a            datetime
#1 1 2019-02-01 01:00:00
#2 2 2019-02-01 02:00:00
#3 3 2019-02-01 03:00:00
#4 4 2019-02-01 04:00:00
#5 5 2019-02-01 05:00:00
Run Code Online (Sandbox Code Playgroud)

我们可以在空格(或任何其他存在的分隔符)上拆分列以获得单独的日期和时间列,可以使用 tidyr::separate

tidyr::separate(df, datetime, c("date", "time"), sep = " ")
#  a       date     time
#1 1 2019-02-01 01:00:00
#2 2 2019-02-01 02:00:00
#3 3 2019-02-01 03:00:00
#4 4 2019-02-01 04:00:00
#5 5 2019-02-01 05:00:00
Run Code Online (Sandbox Code Playgroud)

如果我们想保留原始列 ( datetime) 我们可以添加remove = FALSE.


小智 5

通过查看您的列格式,我会说您可以使用 as.POSIXct 来正确格式化您的列,然后使用 format() 来提取所需的数据。

这是我在拆分 DateTime 列时使用的代码,

df$Time <- format(as.POSIXct(df$Start,format="%Y:%m:%d %H:%M:%S"),"%H:%M:%S")

df$Date <- format(as.POSIXct(df$Start,format="%Y:%m:%d %H:%M:%S"),"%Y:%m:%d")
Run Code Online (Sandbox Code Playgroud)