我很好奇,为什么没有一个与此问题相似的问题(想知道它是否由于我的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()
答案 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,因为字符值与不完全匹配日期。但这只是一个猜测。