首页 > 解决方案 > 如何将单个日期列转换为三个单独的列(y、m、d)?

问题描述

我有一个包含数千个日期ymd格式的大型数据集。我想转换此列,以便按年、月和日分为三个单独的列。实际上有数千个日期,所以我试图用整个数据集的单个代码来做到这一点。

标签: rdplyrlubridate

解决方案


为此,您可以使用lubridateyear()中的、month()day()提取器。这是一个例子:

library('dplyr')
library('tibble')
library('lubridate')

## create some data
df <- tibble(date = seq(ymd(20190101), ymd(20191231), by = '7 days'))

产生

> df
# A tibble: 53 x 1
   date      
   <date>    
 1 2019-01-01
 2 2019-01-08
 3 2019-01-15
 4 2019-01-22
 5 2019-01-29
 6 2019-02-05
 7 2019-02-12
 8 2019-02-19
 9 2019-02-26
10 2019-03-05
# … with 43 more rows

然后mutate df使用相关的提取器功能:

df <- mutate(df,
             year  = year(date),
             month = month(date),
             day   = day(date))

这导致:

> df
# A tibble: 53 x 4
   date        year month   day
   <date>     <dbl> <dbl> <int>
 1 2019-01-01  2019     1     1
 2 2019-01-08  2019     1     8
 3 2019-01-15  2019     1    15
 4 2019-01-22  2019     1    22
 5 2019-01-29  2019     1    29
 6 2019-02-05  2019     2     5
 7 2019-02-12  2019     2    12
 8 2019-02-19  2019     2    19
 9 2019-02-26  2019     2    26
10 2019-03-05  2019     3     5
# … with 43 more rows

如果您只想要新的三列,请使用transmute()而不是mutate().


推荐阅读