2016-07-10 14 views
1

Haftungsausschluss - Titel könnte irreführend sein - Ich denke, ein Teil des Grundes, warum ich keine Lösung gefunden habe, ist, dass ich nicht genau weiß, was ich googlen soll.Hinzufügen von Variablenzählungen über mehrere Gruppierungen

Ich habe einen Datensatz auf Gruppenebene in einem erweiterten Format; Code Jahre und Land für jede Gruppe (id) wiederholt wie unten (manuelle Eingabe)

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 

Ich will Land-Jahr zählt als Spalten am Ende hinzufügen, damit es wie folgt aus

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 
aussehen würde

Ich habe aggregate, count und dplyr ohne Erfolg versucht. Ich dachte Group by and conditionally count oder Frequency count for a specific category könnte den Trick tun, aber ich konnte es nicht zur Arbeit bekommen. Wie kann ich das erreichen?

+0

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

+0

Das wäre "v1" für alle Jahre und Länder im 'df', nein? – rfsrc

Antwort

1

Wir mutate_each von dplyr nach dem Gruppieren von ‚Jahr‘ verwenden und ‚Land‘

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

Danke, ich habe es schon mal mit 'mutate' versucht, dieses tut was ich brauche. – rfsrc

0

Ich denke, Sie auch nur mutate verwenden können.

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

Hallo, ich denke, es funktioniert mit 'sum', wie der andere Kommentator vorgeschlagen hat, aber ich möchte das auch für kontinuierliche Variablen verwenden (zum Beispiel mit' ineq') und nicht nur für binäre Variablen. – rfsrc