我在使用dplyr
和tidyr
从我的数据框生成新的摘要列时遇到问题。我有一个df,它包含两个因子变量A和B,每个变量都有很多(> 10)级别。对于因子变量A的每个级别,我想计算变量B的特定级别的所有出现次数,并将它们存储在新列中。
然后我想用不同级别的B重复这个并将它们存储在第二列中。在每个汇总步骤中,我需要保持0次出现的组
我从nycflights13
df创建了一个示例来说明我的问题。
flights$carriers
有16个级别。对于每一个,我想知道它到这些目的地的航班总数,用flights$dest
编码:ALB,BUF,ROC和SYR,包括该航空公司是否有0个航班飞往这些目的地。
我也想知道只有ALB + SYR的飞行总和(所以我可以用ALB + BUF + ROC + SYR绘制ALB + SYR的百分比)。
下面的代码有效,但我正在寻找最简洁的方法,我猜这不是它。要让complete()
以我想要的方式工作,我必须先将dest
和carrier
转换为因子。
flights$carrier <- as.factor(flights$carrier)
flights$dest <- as.factor(flights$dest)
## count occurrences of ALB+SYR+ROC+BUF
summary <- flights %>%
group_by(carrier, dest) %>%
summarise(count = n()) %>%
complete(dest, fill = list(count = 0)) %>%
filter(dest == "ALB"|dest == "BUF"|dest == "ROC"|dest == "SYR") %>%
ungroup() %>%
group_by(carrier) %>%
summarise(upstate_total = sum(count))
## count occurrences of only ALB + SYR
alb_syr <- flights %>%
group_by(carrier, dest) %>%
summarise(count = n()) %>%
complete(dest, fill = list(count = 0)) %>%
filter(dest == "ALB"|dest == "SYR") %>%
ungroup() %>%
group_by(carrier) %>%
summarise(alb_syr_count = sum(count)) %>%
select(alb_syr_count) %>%
unlist()
## bind to summary df
summary$alb_syr <- alb_syr
注意:最初,我认为先过滤,然后分组和汇总会更简单,但我不能让complete()
从过滤的df继承组。相反,它继承自原始 flights
df。当我在下面执行时,dest
的所有级别都出现在输出中,而不仅仅是我过滤的那些级别:
subset <- flights %>%
filter(dest == "ALB"|dest == "BUF"|dest == "ROC"|dest == "SYR")
summary2 <- subset %>%
group_by(carrier, dest) %>%
summarise(count = n()) %>%
complete(dest, fill = list( count = 0))
提前感谢您的帮助!!我正在使用一个旧的Mac OS,因此在我的软件包版本中受到一些限制,并希望得到与我所拥有的一致的答案。
> sessionInfo()
R version 3.2.1 (2015-06-18)
Platform: x86_64-apple-darwin10.8.0 (64-bit)
Running under: OS X 10.7.5 (Lion)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] nycflights13_0.2.0 RColorBrewer_1.1-2 reshape2_1.4.1 ggplot2_2.0.0
purrr_0.2.2
[6] dplyr_0.4.3 tidyr_0.4.0
loaded via a namespace (and not attached):
[1] Rcpp_0.12.3 assertthat_0.1 grid_3.2.1 R6_2.1.2
plyr_1.8.3 gtable_0.2.0
[7] DBI_0.3.1 magrittr_1.5 scales_0.4.0 stringi_1.0-1
lazyeval_0.2.0 tools_3.2.1
[13] stringr_1.0.0 munsell_0.4.3 parallel_3.2.1 colorspace_1.2-6
knitr_1.12.3