表函数不适用于带有日期类的日期-R

时间:2019-11-18 04:09:43

标签: r dplyr tidyverse

我很好奇,为什么没有一个与此问题相似的问题(想知道它是否由于我的R控制台中的某个东西而无法正常工作,但似乎没有),但这就是问题。数据:

df <- structure(c("17532", "17577", "17579", "17593", "17599", "17599", 
"17599", "17599", "17599", "17599", "17599", "17599", "17599", 
"17599", "17599", "17599", "17599", "17599", "17599", "17599", 
"17599", "17599", "17599", "17599", "17599", "17599", "17599", 
"17599", "17599", "17599", "17599", "17599", "17599", "17599", 
"17599", "17599", "17599", "17599", "17599", "17599", "17599", 
"17599", "17599", "17599", "17599", "17599", "17599", "17599", 
"17599", "17599", "17599", "17599", "17599", "17599", "17599", 
"17599", "17599", "17599", "17599", "17599", "17599", "17599"
), class = "Date")

table(df)
> .
> 2018-01-01 2018-02-15 2018-02-17 2018-03-03 2018-03-09 
>          0          0          0          0          0 

为什么会不起作用?

编辑:附加信息

以上日期的格式来自先前用lubridate::as.Date()从字符到日期的转换。向量的名称为fecha,这是字符向量的一些原始值:

"1960-01-06 00:00:00+00:00" "1960-03-27 00:00:00+00:00" "1960-05-07 00:00:00+00:00"

数据是每天注册的,因此您可以假设每个日期的时间为00:00:00+00:00

这是字符向量转换为日期的代码:

df$fecha <- df$fecha %>% as.Date()

1 个答案:

答案 0 :(得分:2)

日期存储为整数,而不是您指定的字符。

df <- as.Date(c(17532L, 17577L, 17579L, 17593L, 17599L, 17599L, 17599L, 17599L, 
        17599L, 17599L, 17599L, 17599L, 17599L, 17599L, 17599L, 17599L, 
        17599L, 17599L, 17599L, 17599L, 17599L, 17599L, 17599L, 17599L, 
        17599L, 17599L, 17599L, 17599L, 17599L, 17599L, 17599L, 17599L, 
        17599L, 17599L, 17599L, 17599L, 17599L, 17599L, 17599L, 17599L, 
        17599L, 17599L, 17599L, 17599L, 17599L, 17599L, 17599L, 17599L, 
        17599L, 17599L, 17599L, 17599L, 17599L, 17599L, 17599L, 17599L, 
        17599L, 17599L, 17599L, 17599L, 17599L, 17599L), origin = "1970-01-01")
table(df)
# df
# 2018-01-01 2018-02-15 2018-02-17 2018-03-03 2018-03-09 
#          1          1          1          1         58 

要解决您的示例,您可以执行table(as.Date(as.integer(df), origin = "1970-01-01"))。 1970年1月1日是R的日期来源。另一个常见的例子是Excel中的“ 12-30-1899”和SQL Server中的“ 1753-01-01”。

对于您所遇到的行为,看起来它正确地获取了日期的打印方法标签,但随后又说每个频率为0,因为字符值与不完全匹配日期。但这只是一个猜测。