2016-07-10 22 views
1

免責事項 - タイトルが誤解を招く可能性があります - 解決策が見つからなかった理由の一部は、Googleに何が正確にわからないということです。複数のグループを使用して変数を追加する

私は拡張されたフォーマットでグループレベルのデータセットを持っています。年と国コードなど(手入力)以下のように各グループ(ID)に対して繰り返さ

year country id v1 v2 v3 
1991 20  1 1 0 0 
1991 20  2 0 1 0 
1991 20  3 0 0 1 
1991 20  4 1 0 0 
1991 20  5 1 0 0 
1991 20  6 0 1 0 

私はそれが次

year country id v1 v2 v3 v1.count v2.count v3.count 
1991 20  1 1 0 0  3   2   1 
1991 20  2 0 1 0  3   2   1 
1991 20  3 0 0 1  3   2   1 
1991 20  4 1 0 0  3   2   1 
1991 20  5 1 0 0  3   2   1 
1991 20  6 0 1 0  3   2   1 
のようになりますので、最後に列として国年のカウントを追加します

私はaggregatecount、およびdplyrを試してみました。私はGroup by and conditionally countまたはFrequency count for a specific categoryがトリックをするかもしれないと思ったが、うまく動作しなかった。どうすればこれを達成できますか?

+0

'df $ v1.count < - sum(df $ v1)'? – 989

+0

それは 'df'のすべての年と国で' v1'を集計しますか?いいえ? – rfsrc

答えて

1

私たちは、「年」と「国の

df1 %>% 
    group_by(year, country) %>% 
    mutate_each(funs(count = sum), v1:v3) 
# year country id v1 v2 v3 v1_count v2_count v3_count 
# <int> <int> <int> <int> <int> <int> <int> <int> <int> 
#1 1991  20  1  1  0  0  3  2  1 
#2 1991  20  2  0  1  0  3  2  1 
#3 1991  20  3  0  0  1  3  2  1 
#4 1991  20  4  1  0  0  3  2  1 
#5 1991  20  5  1  0  0  3  2  1 
#6 1991  20  6  0  1  0  3  2  1 
+1

ありがとう、私はそれを前に 'mutate'で試しました、これは私が必要とするものです。 – rfsrc

0

によってグループ化した後、私はあなたにもちょうどmutateを使用することができますねdplyrからmutate_eachを使用することができます。

df1 <- read.table(text="year country id v1 v2 v3 
1991 20  1 1 0 0 
1991 20  2 0 1 0 
1991 20  3 0 0 1 
1991 20  4 1 0 0 
1991 20  5 1 0 0 
1991 20  6 0 1 0", head=T, as.is=T) 

df1 

library(dplyr) 

df1 %>% group_by(year, country) %>% 
    mutate(v1.count=sum(v1), v2.count=sum(v2), v3.count=sum(v3)) 
# Source: local data frame [6 x 9] 
# Groups: year, country [1] 

# year country id v1 v2 v3 v1.count v2.count v3.count 
# (int) (int) (int) (int) (int) (int) (int) (int) (int) 
# 1 1991  20  1  1  0  0  3  2  1 
# 2 1991  20  2  0  1  0  3  2  1 
# 3 1991  20  3  0  0  1  3  2  1 
# 4 1991  20  4  1  0  0  3  2  1 
# 5 1991  20  5  1  0  0  3  2  1 
# 6 1991  20  6  0  1  0  3  2  1 
+0

こんにちは、私は他の人のコメントが示唆しているように、 'sum'で動作すると思いますが、バイナリ変数だけでなく、連続変数(例えば' ineq'など)にも使いたいと思います。 – rfsrc

関連する問題