2

抱歉这个菜鸟问题:我正在尝试计算 R 中的每日统计信息。每个日期有多个约会,以及 3 种不同的状态:“已确认”、“已取消”和“延迟取消”。

我已经尝试过table(data)似乎可以进行正确计数的方法,但是它会使所有日期都乱七八糟。有没有办法解决这个问题,或者我怎样才能在不丢失日期顺序的情况下进行计数?

> 数据[25:35,]

        日期状态
25 2012 年 9 月 8 日 确认
26 9/8/2012 已确认
27 9/8/2012 取消
28 2012 年 9 月 8 日 确认
29 2012 年 9 月 9 日 确认
30 2012 年 9 月 9 日 确认
31 2012 年 9 月 9 日 取消
32 2012 年 9 月 9 日 确认
33 2012 年 9 月 9 日延迟取消
34 2012 年 9 月 9 日 确认
35 2012 年 9 月 10 日 确认

这是 3 个月内约 1000 次预约的简化版本(全套还有房间号、客户类型等),所以我希望通过这个简单的示例了解如何在 R 中对数据进行计数和排序。

如果我创建一个新的唯一日期向量,unique(data$Date)我可以使用它作为箱来对状态计数进行排序吗?

4

1 回答 1

2

我会countplyr包中使用来做到这一点。让我们加载您的数据:

dat = read.table(text = "        Date             Status
 9/8/2012          Confirmed
 9/8/2012          Confirmed
 9/8/2012          Cancelled
 9/8/2012          Confirmed
 9/9/2012          Confirmed
 9/9/2012          Confirmed
 9/9/2012          Cancelled
 9/9/2012          Confirmed
 9/9/2012  LateCancellation
 9/9/2012          Confirmed
 9/10/2012          Confirmed", sep = "", header = TRUE)

首先,我们需要转换Date为适当的时间感知数据类型而不是字符串:

dat[["Date"]] = strptime(dat[["Date"]], format = "%m/%d/%Y")

并执行计数:

require(plyr)
cdat = count(dat, c("Date", "Status"))
> cdat
        Date           Status freq
1 2012-09-08        Cancelled    1
2 2012-09-08        Confirmed    3
3 2012-09-09        Cancelled    1
4 2012-09-09        Confirmed    4
5 2012-09-09 LateCancellation    1
6 2012-09-10        Confirmed    1

请注意,日期现在的顺序正确,这是因为使用strptime. 如果你想要输出看起来像什么,你需要从包table中进行一些调整:dcastreshape2

> dcast(cdat, Date ~ Status, value.var = "freq")
        Date Cancelled Confirmed LateCancellation
1 2012-09-08         1         3               NA
2 2012-09-09         1         4                1
3 2012-09-10        NA         1               NA
于 2012-11-16T07:55:45.480 回答