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

如何使用表格函数获取R中的比例?,r,R,我有一个犯罪数据集,几乎没有变量(ID、年份、日期、逮捕),现在我正试图获得某一特定年份的逮捕比例,例如年份(200120102015)。我如何使用表函数计算它 我尝试使用以下代码,但结果并不理想: prop.table(table(CRDATA$Year,CRDATA$Arrest)) 及 注:数据集名称为CRDATA,年份为日期类型,逮捕为Logi数据类型 下面是数据集的一部分 ID Date Location Arrest Area Year 895

我有一个犯罪数据集,几乎没有变量(ID、年份、日期、逮捕),现在我正试图获得某一特定年份的逮捕比例,例如年份(200120102015)。我如何使用表函数计算它

我尝试使用以下代码,但结果并不理想:

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

注:数据集名称为CRDATA,年份为日期类型,逮捕为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

您需要指定所需内容(总计、行、列):


您需要指定所需内容(总计、行、列):


索引是关键。您可以根据需要的条件列出两个变量。考虑这些数据:

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
因此,对于您的情况,请尝试使用索引处理问题。 而不是

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


索引是关键。您可以根据需要的条件列出两个变量。考虑这些数据:

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
因此,对于您的情况,请尝试使用索引处理问题。 而不是

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


根据您构建数据的方式,在我看来,除非您按年度进行汇总,否则您不会得到真正的年度比例。如果你去prop.table(table-ing right),你会发现每一条记录代表了整个总数(无论是总量、行还是列,如@Robert的回答)

按年份汇总:

library(data.table)
setDT(CRDATA)
CRDATA[, sum(Arrest), by = Year][, .(Year, prop.table(V1))]
[]
中的第一个表达式按年份累加,第二个表达式计算比例并沿年份显示

编辑

A
dplyr
备选方案:

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

通过构建数据的方式,在我看来,除非按年度进行汇总,否则无法得到真正的年度比例。如果你使用
prop.table(table
-ing right),你会发现每一条记录代表的是整个总数(按总数、行或列,如@Robert的回答)

按年份汇总:

library(data.table)
setDT(CRDATA)
CRDATA[, sum(Arrest), by = Year][, .(Year, prop.table(V1))]
[]
中的第一个表达式按年份累加,第二个表达式计算比例并沿年份显示

编辑

A
dplyr
备选方案:

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

请分享一个小的示例数据集,它将使您的代码具有可复制性,以及预期的输出。您好@mtoto,很抱歉提供了不完整的数据,我希望我能更好地解释我自己。我是R新手,正在尽我最大的努力尽快赶上进度!没问题,您能同时显示预期的输出吗?这有什么不好的地方吗我的意思是,对你来说,什么是一个体面的结果?请分享一个小的示例数据集,它将使你的代码具有可复制性,以及预期的输出。嗨@mtoto,很抱歉提供了不完整的数据,我希望我能更好地解释我自己。我是R新手,正在尽我最大的努力尽快赶上进度!没问题,你能在我们讨论时显示预期的输出吗好的,请问什么是不好的结果?对你来说什么是好的结果?嗨@罗伯特,我很感激你的快速回答,叫我天真或愚蠢什么都不…但我想我需要知道很多关于R的事情,因为我不能真正理解你的答案。让我重新构思我的问题(切中要害)我想知道2010年逮捕的比例,如何通过表函数得到它?然后按行使用prop,在示例中,答案是40%
prop.table(表(dat$Year,dat$Var),1)
Hi@Robert,我感谢你的快速回答,称我为天真或愚蠢什么都不是……但我想我需要知道很多关于R的事情,因为我无法真正理解你的答案。让我重新构思我的问题(切中要害)我想知道2010年逮捕的比例,如何通过表函数得到它?然后使用按行推进,在示例中,答案将是40%
prop.table(表(dat$Year,dat$Var),1)
我正在处理:)我正在处理:)