R 随时间变化的计数因子水平
我的data.frame如下所示: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
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)