我有一个数据集,如下所示:
Month count
2009-01 12
2009-02 310
2009-03 2379
2009-04 234
2009-05 14
2009-08 1
2009-09 34
2009-10 2386
我想要绘制数据(以x值表示月份,以y值表示计数)。因为数据中有间隔,所以我想要将月份的信息转换成日期。我尝试:
as.Date("2009-03", "%Y-%m")
但是没有用,怎么了?好像as.Date()
也需要一天,不能设置一个标准值?哪个函数解决了我的问题?
9条答案
按热度按时间px9o7tmv1#
由于日期对应于一个数值和一个开始日期,因此您确实需要日期。如果您确实需要数据采用日期格式,您可以通过将日期粘贴到日期上,手动将日期固定为每个月的第一天:
lb3vh1jj2#
试试这个。(这里我们使用
text=Lines
来保持示例的独立性,但实际上我们会用文件名来替换它。)X轴对于这些数据来说并不那么漂亮,但是如果你实际上有更多的数据,它可能是可以的,或者你可以使用
?plot.zoo
的示例部分中显示的花哨X轴的代码。上面创建的zoo系列
z
具有"yearmon"
时间索引,如下所示:"yearmon"
也可以单独使用:备注:
"yearmon"
类对象按日历顺序排序。1.这将以相等的间隔绘制每月点,这可能是所需的;然而,如果希望以与每个月中的天数成比例的不相等间隔来绘制点,则将
z
的指数转换为"Date"
类:time(z) <- as.Date(time(z))
.wxclj1h53#
如果您需要日期为日期格式,最简洁的解决方案是:
as.Date
会将每个月的第一天固定到yearmon对象中。vaqhlq814#
您也可以使用
lubridate
-包中的parse_date_time
或fast_strptime
函数来实现此目的:这两者之间的区别在于
parse_date_time
允许lubridate样式的格式规范,而fast_strptime
需要与strptime
相同的格式规范。要指定时区,可以使用
tz
-参数:当日期-时间数据中存在不规则性时,可以使用
truncated
-参数指定允许的不规则性数量:使用的数据:
fjnneemd5#
使用anytime包:
uqxowvwt6#
实际上,正如上面提到的(以及SO的其他部分),为了将字符串转换为日期,您需要一个特定的月份日期。
如果日期字符串没有完整地指定日期,则返回的答案可能是系统特定的。最常见的行为是假设缺少的年、月或日是当前的年、月或日。如果指定的日期不正确,可靠的实现将给予错误,并且日期报告为NA。不幸的是,一些常见的实现(如
glibc
)是不可靠的,并且猜测预期的含义。一个简单的解决方案是将日期
"01"
粘贴到每个日期,并使用strptime()
将其表示为该月的第一天。如果您想了解更多有关R中处理日期和时间的背景信息,请访问:
在R中,时间使用
POSIXct
和POSIXlt
类,日期使用Date
类。日期存储为自1970年1月1日以来的天数,时间存储为自1970年1月1日以来的秒数。
例如:
要对日期和时间执行操作:
要处理日期,可以使用
strptime()
(从手册页借用这些示例):dfuffjeb7#
我认为@ben-rollert的解决方案是一个很好的解决方案。
如果你想在一个新包的函数中使用这个解决方案,你必须小心。
当开发软件包时,建议使用语法
packagename::function_name()
(参见http://kbroman.org/pkg_primer/pages/depends.html)。在这种情况下,必须使用
zoo
库定义的as.Date()
版本。以下是一个示例:
因此,如果您正在开发一个包,最好的做法是用途:
eivgtgni8#
tidyverse
最近在lubridate
的基础上增加了clock
包,它具有一些很好的功能:日期操作和提取
这个函数的输出是一个年-月-日向量,您仍然可以在其中进行日期运算,并按预期应用其他常用函数:
如果需要,还可以使用
set_day
设置日期:处理无效日期
或者,如果您希望使用此结构清楚地获取每个月的最后一天,则
invalid_*
函数集可以提供帮助:可以使用
invalid_resolve
处理无效日期,也可以使用invalid_remove
删除无效日期:从文档中,您可以为
invalid
参数指定以下值来处理无效日期:“previous”:上一个有效的时间瞬间。
“前一天”:时间中的前一个有效日期,保留当天的时间。
“next”:下一个有效瞬间。
“next-day”:时间上的下一个有效日期,保持当天的时间。
“overflow”:溢出的天数是输入无效的天数。丢弃时间。
“溢出日”:输入无效的天数溢出。保留一天中的时间。
“NA”:用NA替换无效日期。
“error”:无效日期错误。
9rbhqvlz9#
从
lubridate
使用ym
的一种方式。月份可以是数字、缩写月份或带有各种分隔符(甚至没有分隔符)的完整月份名称,例如
在给定数据上:
请注意,如果反过来也有
my
,例如Sep/2022
。数据