2016-04-25 16 views
0

私は(ID、年、日付、逮捕)のようにいくつかの変数を持つ犯罪データセットを持っていますが、今年は特定の年に行われた逮捕の割合を得ようとしています(2001,2010,2015)テーブル関数を使って計算しますか?テーブル関数を使用してRで比率を取得する方法は?

私は、コードの下に使用してみましたが、それはまともな結果を与えるものではありません:

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

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

注:データセット名はCRDATAで、今年はDate型と停止のですロジデータ型について以下

は、データセットの一部である

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

次に、プロペラを行で使用します。答えは40% 'prop.table(table(dat $ Year、dat $ Var)、1)' – Robert

0

インデックスが鍵となります。必要な基準に従って2つの変数を表にすることができます。これらのデータを考えてみましょう:

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 - rigth awayの場合は、@ Robertの答えのように、合計、行または列のいずれかによって各レコードが表すすべてのレコードが表示されます。年summaryzeする

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

年別[]集計しにおける最初の式、二番目は、割合を計算し、年に沿って表示します。

########## EDIT ########

dplyr代替:

library(dplyr) 
CRDATA %>% group_by(YEAR) %>% summarize(arr = sum(Arrest)) %>% mutate(prop=arr/sum(arr)) 
関連する問題