如何获得R中每日时间序列的分类频率

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获得R中每日时间序列的分类频率相关的知识,希望对你有一定的参考价值。

我有这样一个数据框:

data <- data.frame(daytime = c('2005-05-03 11:45:23', '2005-05-03 11:47:45', 
                           '2005-05-03 12:00:32', '2005-05-03 12:25:01',
                           '2006-05-02 10:45:15', '2006-05-02 11:15:14',
                           '2006-05-02 11:16:15', '2006-05-02 11:18:03'),
               category = c("A", "A", "A", "B", "B", "B", "B", "A"))
print(data)

              daytime category    date2
1 2005-05-03 11:45:23        A 05/03/05
2 2005-05-03 11:47:45        A 05/03/05
3 2005-05-03 12:00:32        A 05/03/05
4 2005-05-03 12:25:01        B 05/03/05
5 2006-05-02 10:45:15        B 05/02/06
6 2006-05-02 11:15:14        B 05/02/06
7 2006-05-02 11:16:15        B 05/02/06
8 2006-05-02 11:18:03        A 05/02/06

我想将此数据框转换为每日分类频率的时间序列,如下所示:

         day cat_A_freq cat_B_freq
1 2005-05-01          3          1
2 2005-05-02          1          3

我试过做:

library(anytime)
data$daytime <- anytime(data$daytime)

data$day <- factor(format(data$daytime, "%D"))
table(data$day, data$category)

           A B
  05/02/06 1 3
  05/03/05 3 1

但正如您可以看到格式化新变量day,更改日期的外观。您还可以看到表格没有以正确的顺序返回日期(年份不按顺序),以便我可以轻松地转换为时间序列。

有关如何以更简单的方式获取频率的任何想法,或者如果是这样,如何以正确的日期顺序获取频率并进入数据帧以便轻松转换为时间序列对象?

答案

使用的解决方案。您的数据中daytime列的格式是好的,因此我们可以直接使用as.Date而无需指定其他格式或使用其他函数。

library(tidyverse)
data2 <- data %>%
  mutate(day = as.Date(daytime)) %>%
  count(day, category) %>%
  spread(category, n)
data2
# # A tibble: 2 x 3
#          day     A     B
# *     <date> <int> <int>
# 1 2005-05-03     3     1
# 2 2006-05-02     1     3

以上是关于如何获得R中每日时间序列的分类频率的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用table函数计算单分类变量的频率表(frequency table)使用prop.table函数将table函数计算获得的频率表转化为比率表返回单分类变量每一个类别的比率或者百分比

R:如何计算列中用逗号分隔的所有字符值?

如何在R中创建ts对象?

如何使用 `tempdisagg` 包中的 `td` 命令将每月数据分解为每日数据频率?

每日一题1224. 最大相等频率

根据R中data.frame行中类的频率分配类