【问题标题】:Subsetting panel data via unique values通过唯一值对面板数据进行子集化
【发布时间】:2015-04-02 04:02:45
【问题描述】:

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

  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

我没有足够的 R 经验来执行此类任务,因此将不胜感激。

【问题讨论】:

    标签: r subset panel-data


    【解决方案1】:

    看起来是使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      • 2014-05-05
      相关资源
      最近更新 更多