通过唯一值子集化面板数据

时间:2015-02-03 03:18:59

标签: r subset panel-data

我想根据特定标准细分面板数据,并对每个细分进行汇总统计。数据:

  store year    rev space  market
      1 2004 110000  1095     136
      1 2005 110000  1095     136
      1 2006 110000  1095     136
      1 2007 120000  1095     136
      2 2004  35000   800     136
      3 2004  45000  1000     136
      3 2005  45000  1000     136
      3 2006  45000  1000     136
      3 2007  45000  1000     136
      4 2005  17500   320     136
      4 2006  17500   320     136
      4 2007  17500   320     136
      5 2005  45000   580     191
      5 2006  45000   580     191
      5 2007  45000   580     191
      6 2004   7000   345     191
      6 2005   7000   345     191
      6 2006   7000   345     191
      7 2007  10000   500     191

从上面的例子中我想将商店分为进入者,退出者和现有者。例如,我想知道在整个期间有多少商店退出市场,这应该是这样的:

 store year   rev space  market
      2 2004 35000   800     136
      6 2006  7000   345     191

已进入市场:

 store year    rev space  market
      4 2005  17500   320     136
      5 2005  45000   580     191
      7 2007  10000   500     191

在整个期间仍然有责任:

 store year    rev  space  market
      1 2004 110000   1095     136
      1 2005 110000   1095     136
      1 2006 110000   1095     136
      1 2007 120000   1095     136     
      3 2004  45000   1000     136
      3 2005  45000   1000     136
      3 2006  45000   1000     136
      3 2007  45000   1000     136

我没有足够的经验来执行此类任务,因此输入将受到赞赏。

1 个答案:

答案 0 :(得分:3)

使用data.table看起来是一个很好的借口:

library(data.table)
setDT(dat)

dat[, if(!max(dat$year) %in% year) tail(.SD,1) , by=store]

#   store year   rev space market
#1:     2 2004 35000   800    136
#2:     6 2006  7000   345    191


dat[, if(!min(dat$year) %in% year) head(.SD,1) , by=store]

#   store year   rev space market
#1:     4 2005 17500   320    136
#2:     5 2005 45000   580    191
#3:     7 2007 10000   500    191

dat[, if(min(dat$year) %in% year & max(dat$year) %in% year) .SD , by=store]

#   store year    rev space market
#1:     1 2004 110000  1095    136
#2:     1 2005 110000  1095    136
#3:     1 2006 110000  1095    136
#4:     1 2007 120000  1095    136
#5:     3 2004  45000  1000    136
#6:     3 2005  45000  1000    136
#7:     3 2006  45000  1000    136
#8:     3 2007  45000  1000    136