2015-12-22 21 views
6

I次のデータセットがあります。簡単な方法

sample.data <- data.frame(Step = c(1,2,3,4,1,2,1,2,3,1,1), 
          Case = c(1,1,1,1,2,2,3,3,3,4,5), 
          Decision = c("Referred","Referred","Referred","Approved","Referred","Declined","Referred","Referred","Declined","Approved","Declined")) 

sample.data 

    Step Case Decision 
1  1 1 Referred 
2  2 1 Referred 
3  3 1 Referred 
4  4 1 Approved 
5  1 2 Referred 
6  2 2 Declined 
7  1 3 Referred 
8  2 3 Referred 
9  3 3 Declined 
10 1 4 Approved 
11 1 5 Declined 

ヘッダ上の意思決定と、幅の広い表形式にこれを翻訳するためにRで、それは可能ですし、出現のカウントされ、各セルの値は、例えば:

Case Referred Approved Declined 
1   3   1   0 
2   1   0   1 
3   2   0   1 
4   0   1   0 
5   0   0   1 
+2

集約パラメータを使用することができます。だからあなたの場合、これは 'dcast(sample.data、Case〜Decision)' – Jaap

+0

ありがとう@ジャップです。私は間違いなく、より多くのdcast機能をチェックアウトし、その使い方を学びます。 「長さ」(=カウント)には1分もありましたが。 – dGecko

答えて

9

あなたは、単純なtable()文でこれを達成することができます。ファクターを設定して遊んで、あなたの反応をあなたが望むように得ることができます。

sample.data$Decision <- factor(x = sample.data$Decision, 
           levels = c("Referred","Approved","Declined")) 

table(Case = sample.data$Case,sample.data$Decision) 

Case Referred Approved Declined 
    1  3  1  0 
    2  1  0  1 
    3  2  0  1 
    4  0  1  0 
    5  0  0  1 
+0

'sample.data'に2つの因子変数がある場合、これはどのように機能しますか? 'table(Case = sample.data $ Case、sample.data $ Decision、sample.data $ Reason)'は混乱した結果を与えます。 – dGecko

+0

これは技術的には別の質問ですが、基本的に 'as.data.frame'を使ってテーブルをデータフレームに強制変換します。 – TARehman

+0

お詫び申し上げます。新しい質問をします。 – dGecko

13

dcastlengthreshape2 -packageデフォルトの関数(=カウント数)に集約パラメータ。 data.table-パッケージでは、改良されたバージョンのdcast機能が実装されています。だからあなたの場合には、これは次のようになります。

library('reshape2') # or library('data.table') 
newdf <- dcast(sample.data, Case ~ Decision) 

または明示的なパラメータを使用したと:

newdf <- dcast(sample.data, Case ~ Decision, 
       value.var = "Decision", fun.aggregate = length) 

これは、次のデータフレーム与える:

> newdf 
    Case Approved Declined Referred 
1 1  1  0  3 
2 2  0  1  1 
3 3  0  1  2 
4 4  1  0  0 
5 5  0  1  0 

If you don't specify an aggregation function, you get a warning telling you that dcast is using lenght as a default.

4

をここですdplyr + tidyrアプローチは:

if (!require("pacman")) install.packages("pacman") 
pacman::p_load(dplyr, tidyr) 

sample.data %>% 
    count(Case, Decision) %>% 
    spread(Decision, n, fill = 0) 

## Case Approved Declined Referred 
## (dbl) (dbl) (dbl) (dbl) 
## 1  1  1  0  3 
## 2  2  0  1  1 
## 3  3  0  1  2 
## 4  4  1  0  0 
## 5  5  0  1  0 
3

我々はlenght`(=数) `に` reshape2`パッケージのデフォルトの `dcast`機能にbase Rxtabs

xtabs(Step~Case+Decision, transform(sample.data, Step=1)) 
#  Decision 
# Case Approved Declined Referred 
# 1  1  0  3 
# 2  0  1  1 
# 3  0  1  2 
# 4  1  0  0 
# 5  0  1  0