我们先了解R语言中的日期格式,从https://www.cnblogs.com/ljhdo/p/4804113.html 可以看到:

R语言的基础包中提供了三种基本类型用于处理日期和时间,Date用于处理日期,它不包括时间和时区信息;POSIXct/POSIXlt用于处理日期和时间,其中包括了日期、时间和时区信息。R内部在存储日期和时间时,使用不同的方式:

  • Date类:存储了从197011日以来开始计算的天数,更早的日期表示为负值,也就是说,Date类型是一个整数,以天为单位来计算日期,因此,Date适合用于计算日期。
  • POSIXct:记录了以时间标准时间(UTC)时区位准的,从197011日开始计时的秒数,即,POSIXct类型是整数,以秒为单位来计算时间,因此,POSIXct最适合用于存储和计算时间。
  • POSIXlt:把日期和时间存储为一个列表,其中包括秒、分、时和月份等,POSIXlt是使用列表来表示日期和时间,因此,POSIXlt最适合用于提取日期中的特定部分。

 

导入日期
在R语言中,日期可以通过字符串、数字等形式导入。
如果数据是从Excel导出的,则可能采用数字格式或者字符格式存储。
字符串的导入方式
如果从字符转,则只需要as.Date函数来转。下表中列出了可能的日期段格式。
例如,
“ 05/27/84”的格式为%m /%d /%y,而“ May 27 1984”的格式为%B%d%Y。
要导入这些日期,只需提供日期及其格式(如果未指定,它将尝试%Y-%m-%d,然后尝试%Y /%m /%d):
 

dates <- c("05/27/84", "07/07/05")
betterDates <- as.Date(dates,
  format = "%m/%d/%y")
> betterDates
[1] "1984-05-27" "2005-07-07"
dates <- c("May 27 1984", "July 7 2005")
betterDates <- as.Date(dates,
  format = "%B %d %Y")

> betterDates
[1] "1984-05-27" "2005-07-07"

这将以ISO 8601国际标准格式%Y-%m-%d输出日期。 


从数字格式导入日期
如果要从Excel导入数据,则日期可能是数字格式。 我们仍然可以使用as.Date导入这些,我们只需要知道Excel开始计数的原始日期,并将其提供给as.Date。
对于Windows上的Excel,对于1900年以后的日期,其起始日期为1899年12月30日。(Excel的设计人员认为1900年是闰年,但不是。)对于Mac上的Excel,其起始日期为1904年1月1日。
 

# Windows Excel:
  dates <- c(30829, 38540)
  betterDates <- as.Date(dates,
    origin = "1899-12-30")

>   betterDates
[1] "1984-05-27" "2005-07-07"

# Mac Excel:
  dates <- c(29367, 37078)
  betterDates <- as.Date(dates,
    origin = "1904-01-01")

>   betterDates
[1] "1984-05-27" "2005-07-07"

这将以ISO 8601国际标准格式%Y-%m-%d输出日期。 如果想使用其他格式的日期,请阅读下一步:
更改日期格式
如果要使用标准%Y-%m-%d以外的格式的日期,则可以使用基本包中的格式功能来实现。
例如,
 

format(betterDates,
  "%a %b %d")

[1] "Sun May 27" "Thu Jul 07"

 

正确的世纪
如果要导入的年份中只有两位数字的数据,我们会发现它假设第69到99年是1969-1999,而第00到68年是2000-2068(可能会在R的未来版本中更改)。
如果默认的日期不是我们想要的日期,这里提供一个解决方案:
 

dates <- c("05/27/84", "07/07/05", "08/17/20")
betterDates <- as.Date(dates, "%m/%d/%y")

> betterDates
[1] "1984-05-27" "2005-07-07" "2020-08-17"

correctCentury <- as.Date(ifelse(betterDates > Sys.Date(), 
  format(betterDates, "19%y-%m-%d"), 
  format(betterDates)))

> correctCentury
[1] "1984-05-27" "2005-07-07" "1920-08-17"

 

正确格式化的目的

将日期设置为正确的格式可以使R知道它们是日期,因此可以知道它应该和不应该对它们执行什么计算。 R里面可以提供一些比较方便的日期计算方法:

>   mean(betterDates)
[1] "1994-12-16"

>   max(betterDates)
[1] "2005-07-07"

>   min(betterDates)
[1] "1984-05-27"

 

日期格式

下面再给一些日期的格式

转换符号

说明

示例

%a

星期缩写

Sun, Thu

%A

星期,不缩写

Sunday, Thursday

%b or %h

月份缩写

May, Jul

%B

月份

May, July

%d

月份中的日期
01-31

27, 07

%j

一年的第几天
001-366

148, 188

%m

数字月份
01-12

05, 07

%U

第几周
01-53
(把一周的周日作为这周第一天)

22, 27

%w

星期,数字
0-6
周日是0

0, 4

%W

第几周,第二种计算方法
00-53
(把一周的周一作为这周第一天)

21, 27

%x

日期,特定于语言环境

 

%y

年份,把世纪的部分缩写了
00-99

84, 05

%Y

年份,包含世纪
默认:
00 到 68 年接着 20
69 到 99 年接着 19

1984, 2005

%C

世纪

19, 20

%D

日期形式 %m/%d/%y

05/27/84, 07/07/05

%u

星期
1-7
周一是 1

7, 4

%n

在输出上换行或在输入上输入任意空白

 

%t

输出上的制表符或输入上的任意空格