我有一个犯罪数据集,其变量很少(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
答案 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))