拆分数字yyyymmdd列r

时间:2014-04-01 03:41:55

标签: r

我已经搜索了几个小时,但我仍然非常困难。

我有一个包含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

非常感谢任何帮助!

杰西

3 个答案:

答案 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的答案更优雅。