2017-07-02 16 views
0

グループ化後のscoreの差をYear, State, Tier, Groupで計算したい。それは次の絶対値(すなわち、グループ化は動作するようには思えない)から値を取得し、しかし、私はgroup_by_.dotsmutateを試してみましたR:複数の列でグループ化した後のDplyr遅れ変数

dat2 <- data.frame(
Year = sample(1990:1996, 10, replace = TRUE), 
State = sample(c("AL", "CA", "NY"), 10, replace = TRUE), 
Tier = sample(1:2), 
Group = sample(c("A", "B"), 10, replace = TRUE), 
Score = rnorm(10)) 

:私のデータの定型化された表現は次のようになります。私は、ほとんどの場合、年間差(年月はNAとなりますが、時系列でもあります)をプロットすることに興味があります。これは、遅れや次の年のスコアの計算によって解決できます。

編集:データセットがどのように見えるのであれば、:

Year State Tier Group Score 
1990 AL  1  A  75 
1990 AL  2  A  100 
1990 AL  1  B  5 
1990 AL  2  B  10 
1991 AL  1  A  95 
1991 AL  2  A  80 
1991 AL  1  B  5 
1991 AL  2  B  15 

所望の最終結果は、次のようになります。

Year State Tier Group Score Diff 
1991 AL  1  A  95  20  
1991 AL  1  B  5  0 
1991 AL  2  A  80  -20 
1991 AL  2  B  15  5 
+0

希望する結果が表示されますか? –

答えて

3

私が正しく理解していれば、あなたは違いを計算しようとしていますYear, State, Tier, Groupの各組み合わせ内のScore?おそらく、あなたのデータは時系列でソートされて、意味を成す差異が生じます。これらの組み合わせが繰り返されるようにするためにあなたの例では、小さいですが、私はあなたが探しているソリューションが可能と考えている:

library(dplyr) 
dat2 %>% 
arrange(Year) %>% 
group_by(State, Tier, Group) %>% 
mutate(ScoreDiff = Score - lag(Score)) 

あなたの現在のコードでは、通常、複数存在しなくなりますので、ScoreDiff列はNAsをたくさん持っていますあなたの4つの変数の同じ組み合わせのケースはわずか10のケースです。しかし、もっと一般的なコードで試してみることもできます(私は、開始年を1990年から1890年に変更しました)。

n <- 100 

dat2 <- data.frame(
    Year = sample(1890:1996, n, replace = TRUE), 
    State = sample(c("AL", "CA", "NY"), n, replace = TRUE), 
    Tier = sample(1:2), 
    Group = sample(c("A", "B"), n, replace = TRUE), 
    Score = rnorm(n)) 

dat2 %>% 
    arrange(Year) %>% 
    group_by(State, Tier, Group) %>% 
    mutate(ScoreDiff = Score - lag(Score)) 
+0

こんにちは、ポストのおかげで。これはおおよそ私が思うように、それは私にとってはうまくいかないトリックをするだろう。長いサンプルを実行すると、同じ年/州/層/グループの組み合わせに2つのエントリがある場合にのみ差異が計算されます。つまり、スコアが遅れず、重複して動作します。 – rfsrc

+0

あなたは正しいです。グループには「Year」が含まれているため、同じYearを含む同じ組み合わせが検索されます。私はそれに応じて答えを編集し、上記のコードは今あなたの希望の結果を生成する必要があります。 – Constantinos

関連する問題