我们先了解R语言中的日期格式,从https://www.cnblogs.com/ljhdo/p/4804113.html 可以看到:
R语言的基础包中提供了三种基本类型用于处理日期和时间,Date用于处理日期,它不包括时间和时区信息;POSIXct/POSIXlt用于处理日期和时间,其中包括了日期、时间和时区信息。R内部在存储日期和时间时,使用不同的方式:
- Date类:存储了从1970年1月1日以来开始计算的天数,更早的日期表示为负值,也就是说,Date类型是一个整数,以天为单位来计算日期,因此,Date适合用于计算日期。
- POSIXct类:记录了以时间标准时间(UTC)时区位准的,从1970年1月1日开始计时的秒数,即,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 |
月份中的日期 |
27, 07 |
%j |
一年的第几天 |
148, 188 |
%m |
数字月份 |
05, 07 |
%U |
第几周 |
22, 27 |
%w |
星期,数字 |
0, 4 |
%W |
第几周,第二种计算方法 |
21, 27 |
%x |
日期,特定于语言环境 |
|
%y |
年份,把世纪的部分缩写了 |
84, 05 |
%Y |
年份,包含世纪 |
1984, 2005 |
%C |
世纪 |
19, 20 |
%D |
日期形式 %m/%d/%y |
05/27/84, 07/07/05 |
%u |
星期 |
7, 4 |
%n |
在输出上换行或在输入上输入任意空白 |
|
%t |
输出上的制表符或输入上的任意空格 |
鸡腿吃不腻
1楼 - 4 年,8 月 之前
1970年1月1日,一个神奇的日子。