我在R中有一些非常简单的数据,需要更改其日期格式:
date midpoint
1 31/08/2011 0.8378
2 31/07/2011 0.8457
3 30/06/2011 0.8147
4 31/05/2011 0.7970
5 30/04/2011 0.7877
6 31/03/2011 0.7411
7 28/02/2011 0.7624
8 31/01/2011 0.7665
9 31/12/2010 0.7500
10 30/11/2010 0.7734
11 31/10/2010 0.7511
12 30/09/2010 0.7263
13 31/08/2010 0.7158
14 31/07/2010 0.7110
15 30/06/2010 0.6921
16 31/05/2010 0.7005
17 30/04/2010 0.7113
18 31/03/2010 0.7027
19 28/02/2010 0.6973
20 31/01/2010 0.7260
21 31/12/2009 0.7154
22 30/11/2009 0.7287
23 31/10/2009 0.7375
而不是%d/%m/%Y
,我希望它是标准R格式的%Y-%m-%d
我该如何进行此更改?我试过:
nzd$date <- format(as.Date(nzd$date), "%Y/%m/%d")
但这只是把年份去掉了,把零加到了日子里:
[1] "0031/08/20" "0031/07/20" "0030/06/20" "0031/05/20" "0030/04/20"
[6] "0031/03/20" "0028/02/20" "0031/01/20" "0031/12/20" "0030/11/20"
[11] "0031/10/20" "0030/09/20" "0031/08/20" "0031/07/20" "0030/06/20"
[16] "0031/05/20" "0030/04/20" "0031/03/20" "0028/02/20" "0031/01/20"
[21] "0031/12/20" "0030/11/20" "0031/10/20" "0030/09/20" "0031/08/20"
[26] "0031/07/20" "0030/06/20" "0031/05/20" "0030/04/20" "0031/03/20"
[31] "0028/02/20" "0031/01/20" "0031/12/20" "0030/11/20" "0031/10/20"
[36] "0030/09/20" "0031/08/20" "0031/07/20" "0030/06/20" "0031/05/20"
谢谢!
8条答案
按热度按时间zkure5ic1#
这里有两个步骤:
现在
newdate
列的类型应该是Date
。format()
或strftime()
的问题:一个更完整的例子:
第三列和第四列之间的区别是类型:
newdate
属于Date
类,而txtdate
是字符类。rqqzpn5f2#
在上面的代码中,有两个错误。首先,当你在
as.Date
中阅读nzd$date
时,你没有提到你以什么格式输入date
。因此,它尝试默认设置格式来读取它。如果您看到help
文档,您将看到?as.Date
格式
字符串。如果未指定,它将在第一个非NA元素上尝试“%Y-%m-%d”,然后尝试“%Y/%m/%d”,如果两者都不起作用,则给予错误。否则,将通过strptime进行处理
第二个错误是:即使你想以
%Y-%m-%d
读取它,在format
中你写了"%Y/%m/%d"
。现在,正确的做法是:
uurity8g3#
您也可以使用
lubridate
包中的parse_date_time
函数:parse_date_time
返回一个POSIXct对象,所以我们使用as.Date
来获取一个date对象。parse_date_time
的第一个参数指定日期向量,第二个参数指定格式出现的顺序。orders
参数使parse_date_time
非常灵活。lndjwyie4#
通过
textConnection
阅读数据后,以下内容似乎可以正常工作:fdbelqdn5#
这真的很容易使用包lubridate。你所要做的就是告诉R你的日期已经是什么格式了。然后将其转换为标准格式
nzd$date <- dmy(nzd$date)
就是这样。
ddhy6vgd6#
使用一行将日期转换为首选格式:
0aydgbwb7#
我相信
就足够了。
efzxgjgh8#
如果您的输入具有一致的日期格式,您可以尝试一个简单的解决方法: