首页 > 解决方案 > 将字符分隔到新列中

问题描述

我有以下数据集,并且需要将时间而不是日期放在相对于日期的单独列中。可以用id, 表示加入时间和日期。

数据集:

# A tibble: 10 x 2
   origintime             id
   <dttm>              <int>
 1 2021-03-04 18:44:25     1
 2 2021-03-04 18:28:32     2
 3 2021-03-04 18:25:55     3
 4 2021-03-04 18:23:00     4
 5 2021-03-04 18:20:00     5
 6 2021-03-04 18:15:58     6
 7 2021-03-04 18:11:41     7
 8 2021-03-04 18:10:57     8
 9 2021-03-04 18:10:33     9
10 2021-03-04 18:07:01    10

结果:

# A tibble: 10 x 3
   origintime   time      id
   <dttm>              <int>
 1 2021-03-04 18:44:25     1
 2 2021-03-04 18:28:32     2
 3 2021-03-04 18:25:55     3
 4 2021-03-04 18:23:00     4
 5 2021-03-04 18:20:00     5
 6 2021-03-04 18:15:58     6
 7 2021-03-04 18:11:41     7
 8 2021-03-04 18:10:57     8
 9 2021-03-04 18:10:33     9
10 2021-03-04 18:07:01    10

可重现的代码:

structure(list(origintime = structure(c(1614883465.299, 1614882512.721, 
1614882355.215, 1614882180.074, 1614882000.671, 1614881758.214, 
1614881501.122, 1614881457.527, 1614881433.217, 1614881221.603
), tzone = "UTC", class = c("POSIXct", "POSIXt")), id = 1:10), row.names = c(NA, 
-10L), class = c("tbl_df", "tbl", "data.frame"))

标签: r

解决方案


只需使用formatwith%T从“origintime”列中提取时间分量,同时将“origintime”转换为Date

library(dplyr)  
df1 <-  df1 %>% 
         mutate(time = format(origintime, '%T'), origintime = as.Date(origintime))

或使用separate并作为character列返回

library(tidyr)
df1 %>%
    separate(origintime, into = c('origintime', 'time'), sep=" ")

推荐阅读