2017-04-15 6 views
-1

を作成するために、I、次のデータフレームを持っている:私は基本的に、いわゆるワイドフォーマットでこれをしたい使用列の値は、ワイドフォーマットテーブル

class outcome count total 
A  TP  5  20 
A  FP  5  20 
A  TN  5  20 
A  FN  5  20 
B  TP  10  40 
B  FP  10  40 
B  TN  10  40 
B  FN  10  40 

すなわち

type TP FP TN FN total 
A  5  5  5  5  20 
B  10 10 10 10 40 

私はほとんど行うことによってそこに着くことができます。

> dcast(test,test$outcome ~ test$class) 
Using class...outcome...count....total as value column: use value.var to override. 
    . A  FN  5  20 A  FP  5  20 A  TN  5  20 A  TP  5  20 
1 . A  FN  5  20 A  FP  5  20 A  TN  5  20 A  TP  5  20 
    B  FN  10  40 B  FP  10  40 B  TN  10  40 B  TP  10  40 
1 B  FN  10  40 B  FP  10  40 B  TN  10  40 B  TP  10  40 

ここで、それぞれの結果タイプごとに列がありますが、列名が重複しています行と私の欲しい列のヘッダー(TP、FP、TN、FN)列の値として...まだ。

でもかなり遠いです。

これはdcastでも可能ですか?

答えて

3

はここtidyrspreadを使用してそれを行う方法は次のとおりです。

library(tidyr) 
df1 <-read.table(text="class outcome count total 
A  TP  5  20 
A  FP  5  20 
A  TN  5  20 
A  FN  5  20 
B  TP  10  40 
B  FP  10  40 
B  TN  10  40 
B  FN  10  40",header=TRUE, stringsAsFactors=FALSE) 

library(tidyr) 
spread(df1,outcome,count) 

    class total FN FP TN TP 
1  A 20 5 5 5 5 
2  B 40 10 10 10 10 

をそしてここdcastソリューションです:ベースRにreshapeを使用して

dcast(df1, class +total ~ outcome, value.var="count") 
    class total FN FP TN TP 
1  A 20 5 5 5 5 
2  B 40 10 10 10 10 
+0

これは素晴らしいです。これはまさに私が探していたもので、私はdcastがやっているはずのものだった。 Thaknks。 – brucezepplin

+0

@brucezepplin私は 'dcast'ソリューションを追加しました。私は「収集する」ことが分かりやすいので、私はそれを始めました。 –

0

dfは、あなたのデータフレームである)

reshape(df, idvar = c("class", "total"), timevar = "outcome", direction = "wide") 

# class total count.TP count.FP count.TN count.FN 
#1  A 20  5  5  5  5 
#5  B 40  10  10  10  10 
関連する問題