我有一个如下所示的数据集:
#df
id date
1 2016-08-30 10:46:46.810
我尝试删除小时部分并只保留日期。此功能有效:
df$date <- format(as.POSIXct(strptime(df$date,"%Y-%m-%d %H:%M:%S")) ,format = "%Y-%m-%d")
现在的日期看起来像这样
id date
1 2016-08-30
这就是我一直在寻找的东西。但问题是我希望对这些数据进行一些计算,并且必须将其转换为整数:
temp <- as.numeric(df$date )
它给了我以下警告:
Warning message:
NAs introduced by coercion
结果
NA
有谁知道问题出在哪里吗?
最佳答案
这非常简单,因为您有一个标准格式(请参阅 ISO 8601 ),其中除其他外 anytime包支持(并且它支持其他有点常规的格式):
R> library(anytime)
R> at <- anytime("2016-08-30 10:46:46.810")
R> at
[1] "2016-08-30 10:46:46.80 CDT"
R> ad <- anydate("2016-08-30 10:46:46.810")
R> ad
[1] "2016-08-30"
R>
不过,关键是了解底层日期格式之间的关系。您必须阅读并尝试更多一点。在这里,本质上我们只有
R> as.Date(anytime("2016-08-30 10:46:46.810"))
[1] "2016-08-30"
R>
anytime包还有一些其他技巧,例如从整数、字符、因子、有序等自动转换......
至于你问题的第二部分,你已经如此接近,然后你又用format()
创建了一个角色来破坏它代表。
您几乎总是需要日期
表示:
R> ad <- as.Date(anytime("2016-08-30 10:46:46.810"))
R> as.integer(ad)
[1] 17043
R> as.numeric(ad)
[1] 17043
R> ad + 1:3
[1] "2016-08-31" "2016-09-01" "2016-09-02"
R>
关于r - R中将日期格式转换为数字格式的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40077057/