如何使用表函数获得R中的比例?

时间:2016-04-25 12:02:40

标签: r

我有一个犯罪数据集,其变量很少(ID,年份,日期,逮捕),现在我试图获得特定年份的逮捕比例,例如多年来说(2001,2010,2015)我可以使用表函数来计算它吗?

我尝试使用下面的代码,但它没有给出一个不错的结果:

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

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

注意:数据集名称为CRDATA,Year为Date类型,Arrest为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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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"]))

答案 2 :(得分:0)

顺便说一下,您构建了数据,在我看来,除非按年度总结,否则您将无法获得真实的年度比例。如果你去prop.table(table,那么你所能找到的就是每条记录对整个总数的代表(按总数,行数或列数,如@ Robert的答案)。

按年汇总:

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))