2017-06-02 10 views
0

私は2と3年ごとの企業の合計数をカウントしたい、サンプリングされたデータは次のとおりです。Rカウント出現

# unbalanced data 
library(data.table) 
unbal <- data.frame(
    firm=c(rep('dell',9),rep('hp',5),rep('ibm',5),rep('asus',7)), 
    year=c(2001,2001,2001,2003,2003,2003,2003,2004,2004, 
     2003,3003,2004,2004,2004, 
     2001,2002,2002,2002,2003, 
     2003,2004,2004,2004,2004,2005,2005) 
        ) 

私は年間合計をカウントする簡単な方法を知っています

#repeated occurrence per year 
test<-setDT(unbal)[, d12m:=.N, keyby=.(firm,year)] 

ようdata.table使用しますが、データは15年をカバーするので、それは、2 [d24m] 3年[d36m]あたりの総発生をカウントする方法を私はイライラになり、再帰的に追加することは非常に効率が悪いです手作業で毎年。

*年は連続していません。たとえば、dellには2002年にデータがないため、このギャップ年のケースではd24 = d12です。

thx

+0

私は質問を理解しているかどうかはわかりません。 2001-2002,2002-2003,2003-2004の各範囲の観測数を数えたいですか? – Chris

+0

そうですね、私は各範囲(2001年から2002年までの2年ごと、2001年から2003年までの3年ごと)のobs(企業)の数を数えたいと思います。 – changjx

+0

この例に対応する出力を表示する必要があります。 – Frank

答えて

0

OK私はあなたが探しているものがあると思います。これは最善のアプローチではないかもしれませんが、私はこのようなプロセスに従わなければならないと思います。

1)元のデータは年月が欠けています。 - 今

date_range<- data.frame(year=c(min(df$year):max(df$year)) 

(3003 2003に変更する必要がありますあなたの「UNBAL」のデータフレームは、タイプミスが含まれていることに注意してください):連続するグループを取得するには、我々はすべての年を含むデータフレームを作成する必要がありますまた、これらの年のためのグループを指定するには、良い時間のように思える

date_range$twoyr<- rep(1:ceiling(nrow(date_range)/2),each=2)[1:nrow(date_range)] 

date_range$threeyr<- rep(1:ceiling(nrow(date_range)/2),each=3)[1:nrow(date_range)] 

(上記のコードは単純に二回と三回、それぞれ各レベルの繰り返し配列が作成されます:1。nrow(DATE_RANGE)エン

2)新しい変数 'weight'を作成すると、unbalでインスタンスを追加することができます - その理由は明確になります。

unbal$weight <- 1 

3)はデカルト積を作成 - あなたが大規模なデータセットを持っている場合は、企業や日付のすべての組み合わせが、これはしばらく時間がかかりますが、私は日付の問題のギャップを解消するために考えることができる唯一の方法であるだろう。

cartes<-merge(date_range,firms) 

4)dplyr GROUP_BYを使用すると「隔年」と「三年ごとに」グループのものをカウントする機能をまとめたもの。

merge(cartes,unbal,by=c("year","firm"),all.x=T) %>% 
    group_by(twoyr,firm) %>% 
    summarise(count=sum(weight)) %>% arrange(twoyr) 

merge(cartes,unbal,by=c("year","firm"),all.x=T) %>% 
group_by(threeyr,firm) %>% 
summarise(count=sum(weight)) %>% arrange(threeyr) 

変数 'twoyr'と 'threeyr'はあまりいい名前ではありませんが、これ以上修正する必要があります。私はおそらく後で変更します。

関連する問題