我已经搜索了几个小时,但我仍然非常困难。
我有一个包含DATE列的数据框,我将其引用为NM_DATA $ DATE
它是yyyymmdd形式的数字...我知道...这一百个线程...我尝试了我能找到的每一个解决方案,他们不会为我工作。即将重新加载rStudio(哦,是的..我使用rStudio)
NM_DATA$DATES <- as.Date(NM_DATA$DATES, "%Y%m%d")
返回
Error in as.Date.default(NM_DATA$DATES, "%Y%m%d") :
do not know how to convert 'NM_DATA$DATES' to class "Date"
有人可以解释如何获取DATE专栏
DATE
19870401
19870501
etc
到
DATE
1987-04
1987-05
非常感谢任何帮助!
杰西
答案 0 :(得分:6)
为了在这里得到一个完整的答案,我在某种程度上充实了@ Alex的答案。
as.Date
函数可用于将字符串(或其向量)转换为Date
格式。 strptime
(?strptime
)的帮助页面提供了有关Date
个对象可以使用的可能格式的一些有价值的信息。
在您的情况下,您希望将NM_DATA$DATE
向量转换为日期。格式yyyymmdd由%Y%m%d
表示,因此如果您的向量是字符,我们可以像这样转换它:
NM_DATA$DATE <- as.Date(NM_DATA$DATE, format='%Y%m%d')
但是,如果它是数字(而不是字符),我们首先需要强制转换为字符以避免'origin' must be supplied
错误。 (您可以使用mode(NM_DATA$DATE)
检查向量的模式。)
NM_DATA$DATE <- as.Date(as.character(NM_DATA$DATE), format='%Y%m%d')
现在,向量是Date
对象,我们可以通过各种方式对其进行格式化(在?strptime
中概述)。提取年,月,日数字:
NM_DATA$YEAR <- format(NM_DATA$DATE, '%Y')
NM_DATA$MONTH <- format(NM_DATA$DATE, '%m')
NM_DATA$DAY <- format(NM_DATA$DATE, '%d')
如果您想要月份名称,则可以使用%B
(或%b
作为缩写月份名称),例如:
NM_DATA$MONTHNAME <- format(NM_DATA$DATE, '%B')
答案 1 :(得分:3)
使用格式选项和正确的语法来处理8位数字:
as.Date("20130408",format="%Y%m%d")
然后,使用format()
命令提取您想要的内容,请参阅
Extract month and year from a zoo::yearmon object
答案 2 :(得分:2)
也许你可以根据你的要求尝试substr。
YEAR<-as.numeric(substr(as.numeric(NM_DATA$DATE),1,4))
MONTH<-as.numeric(substr(as.numeric(NM_DATA$DATE),5,6))
我同意@Alex的答案更优雅。