让我们说我有数据框:
df <- data.frame(City = c("NY", "NY", "NY", "NY", "NY", "LA", "LA", "LA", "LA"),
YearFrom = c("2001", "2003", "2002", "2006", "2008", "2004", "2005", "2005", "2002"),
YearTo = c(NA, "2005", NA, NA, "2009", NA, "2008", NA, NA))
其中YearFrom是例如公司成立,YearTo是取消的年份 . 如果YearTo是NA,那么它仍在工作 .
我想计算每年的公司数量 .
该表应如下所示
City |"Year" |"Count"
"NY" |2001 1
"NY" |2002 2
"NY" |2003 3
"NY" |2004 3
"NY" |2005 2
"NY" |2006 3
"NY" |2007 3
"NY" |2008 4
"NY" |2009 3
"LA" |2001 0
"LA" |2002 1
"LA" |2003 1
"LA" |2004 2
"LA" |2005 4
"LA" |2006 4
"LA" |2007 4
"LA" |2008 2
"LA" |2009 2
我想通过dplyr或datatable包解决这个问题,但我无法弄清楚如何?
4 回答
一个较短的
tidyverse
解决方案 .首先,清理数据......
然后,非equi连接:
以下是使用
data.table
的答案 . 数据准备在底部 .写在一行,这是
在这里,
lapply
遍历每一行并构造一个data.table,其中重复的城市值为一列,第二列为操作年份 . 在这里,YearTo递减,因此它不包括关闭年份 . 请注意,在数据准备中,缺失值设置为2018,以便包含当前年份 .lapply
返回一个data.tables列表,它通过rbindlist
组合成一个data.table . 此data.table汇总到城市 - 年对,计数使用.N
构建 .这些回归
data
此解决方案使用
dplyr
和tidyr
.