如何使用表格函数获取R中的比例?
我有一个犯罪数据集,几乎没有变量(ID、年份、日期、逮捕),现在我正试图获得某一特定年份的逮捕比例,例如年份(200120102015)。我如何使用表函数计算它 我尝试使用以下代码,但结果并不理想:如何使用表格函数获取R中的比例?,r,R,我有一个犯罪数据集,几乎没有变量(ID、年份、日期、逮捕),现在我正试图获得某一特定年份的逮捕比例,例如年份(200120102015)。我如何使用表函数计算它 我尝试使用以下代码,但结果并不理想: prop.table(table(CRDATA$Year,CRDATA$Arrest)) 及 注:数据集名称为CRDATA,年份为日期类型,逮捕为Logi数据类型 下面是数据集的一部分 ID Date Location Arrest Area Year 895
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))]
[]
中的第一个表达式按年份累加,第二个表达式计算比例并沿年份显示
编辑
Adplyr
备选方案:
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))]
[]
中的第一个表达式按年份累加,第二个表达式计算比例并沿年份显示
编辑
Adplyr
备选方案:
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)
我正在处理:)我正在处理:)