2016-04-25 52 views
0

我有一個犯罪數據集有幾個變量(身份證,年,日期,逮捕),現在我試圖得到逮捕的比例在一個特定的年份,例如幾年說(2001,2010,2015)怎麼可以我使用表函數來計算它?如何使用表函數獲得R中的比例?

我試着用下面的代碼,但它不會給一個體面的結局:

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

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

注:數據集名稱是CRDATA,新年是Date類型和逮捕的是的Logi數據類型的

下面是數據集的一部分

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

請您分享一個小例子的數據集,這將使你的代碼可重複的,以及預期的產出。 – mtoto

+0

嗨@mtoto,抱歉提供不完整的數據,我希望我能更好地解釋我自己。我是R新手,盡我所能趕上事情! – Soumyaansh

+1

沒有probs,你能展示預期的輸出嗎? – mtoto

回答

3

你需要指定你想要的(總,行,列):

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

嗨@羅伯特,我感謝你的快速反應,稱我是一個天真或愚蠢的什麼不是......但我想我需要知道R中的很多東西,因爲我無法真正理解你的答案。讓我重新思考我的問題(至點)我想知道2010年逮捕的比例,我怎麼能通過表函數得到它? – Soumyaansh

+0

然後在行中使用prop,在這個例子中答案將是40%'prop.table(table(dat $ Year,dat $ Var),1)' – Robert

0

索引是關鍵。您可以根據您需要的標準列出兩個變量。考慮到這些數據:

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 

通過調整dt$colname的參數,就可以得到在最終輸出更精細的控制。我認爲這是需要關注的一點。在這裏,我只想要使用這輛車的人。

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

Female Male 
    0  3 

對於您的情況,因此,嘗試處理索引問題。 而不是

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

嘗試

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

我正在研究它:) – Worice

0

通過你已經結構化數據的方式,在我看來,只有在您按年總結,你不會得到真正的年度比例。如果你去掉prop.table(table,那麼你會發現每個記錄都代表整個總數(按照總數,行數或列數,如@ Robert的答案)。

爲了通過年summaryze:

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

第一表達[]歸總由年,第二個計算的比例,並將其顯示沿着年。

##########編輯########

一個dplyr替代:

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