我有一个名为"开始"的列日期时间(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)
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",这就是我想要的.
感谢大家的帮助!我希望将来可以得到一些帮助,虽然我怀疑它是否会与编程有关......
假设您的数据与一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)