R 随时间变化的计数因子水平

R 随时间变化的计数因子水平,r,date,grouping,factors,R,Date,Grouping,Factors,我的data.frame如下所示: head(entries,10) Provider.Region year.start month.start day.start Provider.Status 23511 North West 0010 05 17 Deregistered (V) 23512 North West 0010 05 17 Deregist

我的data.frame如下所示:

head(entries,10)

     Provider.Region      year.start    month.start day.start  Provider.Status
23511      North West       0010          05        17 Deregistered (V)
23512      North West       0010          05        17 Deregistered (V)
23709   West Midlands       0010          06        01       Registered
23562          London       0010          06        10       Registered
23563          London       0010          06        10       Registered
23566          London       0010          06        10       Registered
23764   West Midlands       0010          06        10 Deregistered (V)
23508          London       0010          06        11 Deregistered (V)
23555   West Midlands       0010          06        11       Registered
23497      South East       0010          06        14 Deregistered (V)
我想每月计算一次与
提供者.Status
相对应的因子水平。我想要的输出应该是这样的:

head(entries.1, 3)

time    region        Deregistered (V) Registered 
5-0010  North West        2              0
6-0010  West Midlands     2              1
6-0010  London            1              3
目前,我一直在使用
dplyr
如下

library(dplyr)
entries %>%
  group_by(Provider.Region, year.start, month.start) %>%
  mutate(counts_status = n())  
但仍然不能产生我的预期输出,因为它给出了如下结果:

Source: local data frame [23,775 x 6]
Groups: Provider.Region, year.start, month.start [606]

Provider.Region year.start month.start  Provider.Status counts_status
(fctr)     (fctr)      (fctr)              (fctr)         (int)
1       North West       0010          05 Deregistered (V)      2
2       North West       0010          05 Deregistered (V)      2
3    West Midlands       0010          06 Registered            4
4           London       0010          06 Registered            7
5           London       0010          06 Registered            7
6           London       0010          06 Registered            7
7    West Midlands       0010          06 Deregistered (V)      4
8           London       0010          06 Deregistered (V)      7
9    West Midlands       0010          06 Registered            4
10      South East       0010          06 Deregistered (V)      10
..             ...        ...         ...       ...              ...
有没有什么紧凑的方法可以从计数中创建变量?非常感谢您可以使用该软件包生成这样一个表格:

library(reshape2)
d <- data.frame(region=rep(c("A", "B", "C"), each=2), timepoint = c(1, 1, 1, 1, 2, 2), provider=rep(c("D", "R"), 3), count_status = 1:6)
dcast(d, region + timepoint ~ provider, value.var = "count_status")

这可以使用整形2或data.table软件包中的
dcast
功能实现:

library(reshape2)
dcast(mydf, paste(year.start,month.start,sep="-") + Provider.Region ~ Provider.Status)

library(data.table)
dcast(setDT(mydf), paste(year.start,month.start,sep="-") + Provider.Region ~ Provider.Status)
最后一个的输出:

   year.start Provider.Region Deregistered(V) Registered
1:    0010-05       NorthWest               2          0
2:    0010-06          London               1          3
3:    0010-06       SouthEast               1          0
4:    0010-06    WestMidlands               1          2
使用上述代码时,您将收到一条警告消息:

Using 'Provider.Status' as value column. Use 'value.var' to override
Aggregate function missing, defaulting to 'length'
这并不意味着什么,但为了防止出现这种情况,您可以指定
value.var
和聚合函数:

dcast(setDT(mydf), 
      paste(year.start,month.start,sep="-") + Provider.Region ~ Provider.Status,
      value.var = "Provider.Status", fun.aggregate = length)

您是否可以在问题中添加一个
dput(标题(条目,10))
?(最容易复制您的数据集)您可能会发现
表(DF$Provider.Region,DF$Provider.Status)
在根据需要聚合后很有用。@akrun我认为这可能是一个重复,但不是那个问题。重塑通常意味着重新排列数据,而不是计算汇总统计数据(如计数)。不管怎样,我现在要解开衣服。希望以后有人会努力找到合适的对象。@Frank是的,这让senseThanks@Jaap。这正是我所需要的。对于我来说,
data.table
reformate
工作得更好,因为它保留了变量的名称。很好地利用了重塑。加一。
dcast(setDT(mydf), 
      paste(year.start,month.start,sep="-") + Provider.Region ~ Provider.Status,
      value.var = "Provider.Status", fun.aggregate = length)