2016-04-25 5 views
0

Ich habe einen Verbrechensdatensatz mit wenigen Variablen wie (ID, Jahr, Datum, Festnahme), jetzt versuche ich, den Anteil der Festnahmen in einem bestimmten Jahr zum Beispiel für Jahre sagen (2001,2010,2015) wie kann Ich berechne es mithilfe der Tabellenfunktion?Wie erhalten Sie Proportionen in R mithilfe der Tabellenfunktion?

Ich habe versucht, unter Code verwenden, aber es ein ordentliches Ergebnis nicht geben:

prop.table(table(CRDATA$Year,CRDATA$Arrest)) 

und

prop.test(table(CRDATA$Year,CRDATA$Arrest)) 

Hinweis: Datasetnamen CRDATA ist, Jahr ist der Datumstyp und Arrest ist von Logi Datentyp

Unten ist ein Teil des Datensatzes

ID  Date   Location Arrest Area Year 
8951354 12/31/12 23:15 STREET FALSE 69 2012 
8951141 12/31/12 22:00 STREET FALSE 24 2012 
8952745 12/31/12 22:00 YARD FALSE 11 2012 
8952223 12/31/12 22:00 STREET FALSE 67 2012 
8951608 12/31/12 21:30 STREET FALSE 35 2012 
8950793 12/31/12 20:30 STREET TRUE 19 2012 
8950760 12/31/12 20:10 STREET FALSE 48 2012 
8951611 12/31/12 20:00 STREET FALSE 40 2012 
8951802 12/31/12 19:00 STREET TRUE 29 2012 
+3

bitte einen kleinen Beispiel-Datensatz teilen, die Ihren Code machen reproduzierbar, zusammen mit der erwarteten Ausgabe. – mtoto

+0

Hallo @mtoto, Entschuldigung für die Bereitstellung unvollständiger Daten, ich wünschte, ich könnte mich besser als das erklären. Ich bin neu bei R und versuche mein Bestes, um die Dinge so schnell wie möglich zu erledigen! – Soumyaansh

+1

Keine Probs, können Sie bitte auch die erwartete Ausgabe anzeigen? – mtoto

Antwort

3

Sie müssen angeben, was Sie wollen (Gesamt, Zeilen, Spalten):

set.seed(123) 
dat=data.frame(Year=rep(2001:2010,10),Var=rnorm(100,200,50)>198) 
prop.table(table(dat$Year,dat$Var)) #% of total 

     FALSE TRUE 
    2001 0.04 0.06 
    2002 0.06 0.04 
    2003 0.05 0.05 
    2004 0.04 0.06 
    2005 0.06 0.04 
    2006 0.03 0.07 
    2007 0.03 0.07 
    2008 0.05 0.05 
    2009 0.05 0.05 
    2010 0.06 0.04 
prop.table(table(dat$Year,dat$Var),1) #% rows 

     FALSE TRUE 
    2001 0.4 0.6 
    2002 0.6 0.4 
    2003 0.5 0.5 
    2004 0.4 0.6 
    2005 0.6 0.4 
    2006 0.3 0.7 
    2007 0.3 0.7 
    2008 0.5 0.5 
    2009 0.5 0.5 
    2010 0.6 0.4 
prop.table(table(dat$Year,dat$Var),2) #% columns 

      FALSE  TRUE 
    2001 0.08510638 0.11320755 
    2002 0.12765957 0.07547170 
    2003 0.10638298 0.09433962 
    2004 0.08510638 0.11320755 
    2005 0.12765957 0.07547170 
    2006 0.06382979 0.13207547 
    2007 0.06382979 0.13207547 
    2008 0.10638298 0.09433962 
    2009 0.10638298 0.09433962 
    2010 0.12765957 0.07547170 
+0

Hallo @Robert, ich schätze deine schnelle Antwort, nenn mich naiv oder doof was nicht ... aber ich denke ich muss eine Menge Dinge in R wissen, da ich deine Antwort nicht wirklich verstehen kann. Lassen Sie mich meine Frage (auf den Punkt) einrahmen. Ich möchte den Anteil der Verhaftungen, die im Jahr 2010 gemacht wurden, wissen, wie kann ich das durch die Tischfunktion bekommen? – Soumyaansh

+0

Dann verwenden Sie prop nach Zeilen, in dem Beispiel wäre die Antwort 40% prop.table (Tabelle (dat $ Jahr, dat $ Var), 1) ' – Robert

0

Indizierung ist der Schlüssel. Sie können zwei Variablen nach den von Ihnen benötigten Kriterien einordnen. Betrachten Sie diese Daten:

dt <- data.frame(gender = rep(c("Male", "Female"), c(4, 2)), trans = rep(c("Car", "Bus", "Bike"), c(3, 2, 1))) 

table(dt) 
     trans 
gender Bike Bus Car 
Female 1 1 0 
Male  0 1 3 

Durch die Argumente dt$colname Einstellung Sie eine feinere Kontrolle über die endgültige Ausgabe erhalten. Ich denke, das ist der Punkt, der Aufmerksamkeit erfordert. Hier möchte ich nur die Leute, die das Auto benutzen.

table(dt$gender[dt$trans=="Car"]) 

Female Male 
    0  3 

Für Ihren Fall, versuchen Sie daher, das Problem mit der Indizierung zu behandeln. Statt

prop.test(table(CRDATA$Year,CRDATA$Arrest)), 

versuchen

prop.test(table(CRDATA$Year[CRDATA$Arrest == "FALSE"])) 
+0

Ich arbeite daran :) – Worice

0

Durch die Art und Weise Sie Ihre Daten strukturiert haben, scheint es mir, dass Sie nicht einen echten jährlichen Anteil , bis Sie von Jahr zusammenfassen bekommen. Wenn Sie prop.table(table -ing rigth weg gehen, alles, was Sie finden, ist, was jeder Datensatz für die gesamte Summe darstellt (entweder durch Summe, Zeile oder Spalte, wie in @ Roberts Antwort).

von Jahr summaryze:

library(data.table) 
setDT(CRDATA) 
CRDATA[, sum(Arrest), by = Year][, .(Year, prop.table(V1))] 

Der erste Ausdruck in [] aufsummiert Jahr, berechnet der zweite, den Anteil und zeigt sie entlang des Jahres.

########## EDIT ########

A dplyr Alternative:

library(dplyr) 
CRDATA %>% group_by(YEAR) %>% summarize(arr = sum(Arrest)) %>% mutate(prop=arr/sum(arr)) 
Verwandte Themen