2017-09-30 3 views
1

私はRにジャンプしようとする新人のSTATAユーザーです。私は様々な演習を行っていますが、group_byとsubsetコマンドで何か問題があります。group_byとsubsetコマンドを使ったグループ計算

私はグループベースの計算を行うための簡単なデータセットを用意しています。私はこれを行うdplyrパッケージからgroups_byコマンドを使用しようとしています。

私のデータセットがかゆみと呼ばれ、4 variabelsから構成されている:
treat-レベルA及びB(処理の種類)
タイプ - レベルダークフェア(肌色)
Y - (レベル0と1故障や治療の大成功)
FREQ - このコードを使用して、この特定のグループ

しているどのように多くの示す数値変数は、あなたはそれを再作成することができます

type <- c(2,2,2,2,1,1,1,1) 
treat <-c(1,1,2,2,1,1,2,2) 
y <- c(1,0,1,0,1,0,1,0) 
freq <- c(9,17,5,20,10,15,3,20) 
itchy <- cbind.data.frame(type,treat,y,freq) 
itchy$type <- as.factor(type) 
itchy$type <- factor(itchy$type,levels = c(1,2), labels = c("Dark", "Fair")) 
itchy$treat <- as.factor(treat) 
itchy$treat <- factor(itchy$treat,levels = c(1,2), labels = c("A", "B")) 
itchy$y <- as.factor(y) 
itchy$y <- factor(itchy$y,levels = c(0,1), labels = c("failure", "succes")) 

Skintype DarkまたはFairに適用したときの治療AおよびBの成功のためのodsを計算したいと思います。

(失敗の成功したイベント/ NRのODSの=のNR)私は2つの質問がある:

1)あなたは私がグループでODSの計算を行うことを支援することはできますか?
2)私はgroup_byとサブセットのさまざまな組み合わせを試してみました。以下のコードは、失敗した試みのいくつかを示しています。あなたは、私はこれがあなたの望ましい結果が得られないGROUP_BYとサブセットのコマンドがどのように動作するか

itchy %>% group_by(treat, type) %>% summarize(ods = (subset(freq, y==1)/subset(freq, y==0))) 

itchy %>% group_by(treat, type) %>% ods <- c((subset(freq, y==1)/subset(freq, y==0))) 

itchy %>% group_by(treat, type) %>% itchy$ods <- (subset(freq, y==1)/subset(freq, y==0)) 

答えて

1

私が正しくあなたを理解していれば、私は次のことがうまくいくと思います。私は計算したい :私はdplyrようtidyverse


library(tidyr) 
itchy %>% 
    spread(y, freq) %>% 
    mutate(odds = succes/failure) 

    type treat failure succes  odds 
1 Dark  A  15  10 0.6666667 
2 Dark  B  20  3 0.1500000 
3 Fair  A  17  9 0.5294118 
4 Fair  B  20  5 0.2500000 
+0

これは魅力的だった。 コードを理解していることを確認してください: "spread"は、y変数を長い形式から長い形式に変更します。 "mutate"は新しい変数 –

+0

を生成します。これは正しいです。明確にするために引数名を使用していたはずです。 http://tidyr.tidyverse.orgでオンラインでドキュメントを見つけることができます –

1
junk = itchy %>% group_by(y,treat, type) %>% summarize(Overall = sum(freq)) 
myfunc = function(arg1,arg2){ 
    filter(junk,treat == arg1,type == arg2)[1,4]/filter(junk,treat == arg1,type == arg2)[2,4] 
} 

myfunc("A","Dark") # You can try all the various combinations here 

の基本的な誤解を持って言うことはできますか?

+0

いいえ、私は十分に私の質問の波平明確な場合は申し訳ありませんの一部であるtidyrパッケージから広がり関数を利用しました:サブグループ(freq、y == 1)/サブセット(freq、y == 0)) (ods =(サブセット(freq、y == 1))) そして、これを4つのグループについて計算したいと思います。 トリートメントA +タイプフェア トリートメントA +タイプダーク トリートメントB +タイプフェア トリートメントB +タイプダーク –

+0

@SteenHarsted私はコードをいくつか変更しました。今すぐチェックできますか? – kasa

関連する問題