2017-07-21 4 views
-2

Ich habe einen Datensatz (test_data) über Bürgerkriege zwischen 1989-2016. Die Einheit der Analyse ist _DyadID_, die die eindeutige Kennung für jedes Paar von Akteuren in einem zivilen Konflikt in diesem Zeitraum ist. Der Datensatz enthält auch _SideA_ und _SideB_, die die Namen der Akteure in einer bestimmten Dyade sind. Jede Reihe ist ein "Ereignis" bewaffneter Gewalt, bei dem es eine Variable für die Anzahl der Todesfälle auf der Seite A gibt (_deaths-a_) und die Anzahl der Todesfälle auf der Seite B (_deaths-b_). Schließlich gibt es eine Variable, die das Monat-Jahr jedes Ereignisses anzeigt.Aggregierende Zähldaten

subset of data

Für meine Forschung, ich brauche die Anzahl der _deaths-a_ und Anzahl der _deaths-b_pro Monat wissen. Im Grunde möchte ich am Ende einen Datensatz haben, der mir monatliche Daten über Todeszahlen für jede _DyadID_ zeigt. Ich habe es geschafft über alle Konflikte pro Monat Gesamtzahl der A/B-Todesfälle zu zeigen, mit dem folgenden Code:

monthly_deaths_a <- aggregate(deaths_a ~ year_month, test_data, sum) 
    monthly_deaths_b <- aggregate(deaths_b ~ year_month, test_data, sum) 

aber nicht wissen, wie diese Daten für jeden Dyade aufgeschlüsselt zu bekommen.

Wenn jemand einen Weg vorschlagen könnte, wäre ich sehr dankbar! Prost

Antwort

0

Hinweis: Nicht sicher, ob Sie nach Monat oder Monat und Jahr müssen ... das sind unterschiedlich, so dass ich trennte die beiden ...

#Start with some sample data 

other_var <- c(1,2,2,1,2,2) 
DyadID <- c(689, 689, 689, 889, 889, 889) 
year_month <- c('2007-04', '2007-04', '2008-04', '2007-06', '2007-06', '2007-07') 
deaths_a <- c(0, 5, 3, 2, 0, 0) 
deaths_b <- c(10, 0, 3, 4, 3, 3) 

df <- data.frame(other_var, DyadID, year_month, deaths_a, deaths_b) 

#Use the dplyr and tidyr packages... 

library(dplyr) 
library(tidyr) 

#Split your variable into year and month (which is what I assume you mean...) 

df <- df %>% 
    separate(year_month, c('year', 'month'), "-") 

#Aggregate 

df2 <- aggregate(cbind(deaths_a, deaths_b) ~ DyadID + year + month, df, sum) 
+0

Ausgezeichnet! Das hat perfekt funktioniert, vielen Dank. –

+0

Hallo nochmal! Ich habe versucht, den gleichen Code zu reproduzieren, aber für die komplexere Version meiner Daten, die insgesamt 42 Variablen hat. df <- data.frame (brd_ged $ DyadID, brd_ged $ ConflictID, brd_ged $ year_month, brd_ged $ LocationInc, brd_ged $ Seite A, brd_ged $ SideA2nd .. etc) df2. <- Aggregat (~ brd_ged.DyadID + brd_ged .year_month, df, sum) Aber ich bekomme "Fehler: keine Zeilen zu aggregieren". Ich kann sehen, warum, weil es nicht weiß, welche zwei Variablen ich die Summe von d. H. Todesfälle_a und Todesfälle_b finden möchte, aber wie kann ich dies in der Formel angeben? –

+0

'Aggregat (. ~ Brd_ged.DyadID + brd_ged.year_month, df Summe)' 'Änderung Aggregat (. ~ Brd_ged $ DyadID + brd_ged $ year_month, df Summe)' – pyll

1

Mit data.table, etwa wie folgt:

require(data.table) 

summary <- test_data[, .(sum(deaths_a), sum(deaths_b)), by= .(year_month)] 
Verwandte Themen