【问题标题】:Count factor levels over time随时间计算因子水平
【发布时间】:2016-02-23 10:45:29
【问题描述】:

我有以下 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)

我想按月统计Provider.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
..             ...        ...         ...       ...              ...

是否有任何紧凑的方法可以让我从计数中创建变量?非常感谢提前

【问题讨论】:

  • 您可以在问题中添加dput(head(entries,10))吗? (将最容易重现您的数据集)
  • 您可能会发现 table(DF$Provider.Region, DF$Provider.Status) 在根据需要汇总后很有帮助。
  • @akrun 我认为这可能是一个骗局,但不是那个问题。重塑通常意味着重新排列数据,而不是计算汇总统计信息(如计数)。无论如何,我现在就不要重复了。希望以后有人会努力找到合适的骗子。
  • @Frank 是的,这是有道理的

标签: r date grouping factors


【解决方案1】:

这可以使用 reshape2data.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)

【讨论】:

  • 谢谢@Jaap。这正是我所需要的。对我来说,data.tablereshape 效果更好,因为它保留了变量的名称。干杯
【解决方案2】:

您可以使用reshape2 包来生成这样的表格:

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")

得到这个输出:

  region timepoint D R
1      A         1 1 2
2      B         1 3 4
3      C         2 5 6

【讨论】:

  • 善用重塑。加一。
猜你喜欢
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 2018-12-07
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
相关资源
最近更新 更多