0

行列を要約する方法を定義するdataframeカテゴリ変数 ( ) を含む混同行列から複数の混同行列を作成したいと考えています。df$park

ここに私のデータがあります:

df <- structure(list(park = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("miss", 
"piro"), class = "factor"), co1 = structure(c(1L, 1L, 1L, 1L, 
1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 
2L), .Label = c("false", "true"), class = "factor"), co2 = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 
1L, 1L, 1L, 1L), .Label = c("false", "true"), class = "factor"), 
    UNIQUE = structure(c(2L, 4L, 7L, 9L, 16L, 17L, 18L, 19L, 
    20L, 21L, 1L, 3L, 5L, 6L, 8L, 10L, 11L, 12L, 13L, 14L, 15L
    ), .Label = c("10066_109_2010", "1012008_ 2008", "10269_7_2006", 
    "10332008_ 2008", "10588_51_2006", "10628_46_2008", "10642006_ 2006", 
    "10683_26_2006", "1072010_ 2010", "10749_1_2009", "10750_1_2010", 
    "10802_6_2006", "10841_43_2006", "10902_19_2006", "10921_37_2006", 
    "1102007_ 2007", "1102008_ 2008", "1102010_ 2010", "11142006_ 2006", 
    "1172007_ 2007", "1232010_ 2010"), class = "factor")), .Names = c("park", 
"co1", "co2", "UNIQUE"), class = "data.frame", row.names = c(NA, 
-21L))

ように見える...

> head (df)
  park   co1   co2         UNIQUE
1 miss false false  1012008_ 2008
2 miss false false 10332008_ 2008
3 miss false false 10642006_ 2006
4 miss false false  1072010_ 2010
5 miss false false  1102007_ 2007
6 miss false false  1102008_ 2008

co1どのようにco2同意し、反対するか (真と偽)を示す混同行列をすばやく簡単に作成できます。

conf <- table(df$co1,df$co2)
conf

    false true
  false    13    3
  true      3    2

しかし、真と偽を で要約したいと思います。これによりdf$park、 に存在する各因子の表が作成されdf$parkます。

何か案は?

ありがとう -アル

編集 1: @won782 は正しいです。このコードは機能します....

conf <- table (df[,3:1])

> conf
, , park = miss

       co1
co2     false true
  false     8    0
  true      0    2

, , park = piro

       co1
co2     false true
  false     5    3
  true      3    0

しかし今、このフォーマットを保持して csv ファイルに出力する必要があります。

編集2:

を使用as.data.frame(table (df[,3:1]))すると、素敵なクロス テーブルが保持されません。これがas.data.frame生み出すものです。

> conf.df <- as.data.frame(table(df[,3:1]))
> conf.df
     co2   co1 park Freq
1  false false miss   50
2   true false miss    1
3  false  true miss    3
4   true  true miss   27
5  false false piro  390
6   true false piro   64
7  false  true piro   17
8   true  true piro   81
9  false false sacn  222
10  true false sacn   14
11 false  true sacn    3
12  true  true sacn   58
13 false false slbe  340
14  true false slbe   65
15 false  true slbe   33
16  true  true slbe  18

EDIT 3:for代わりにループを実行することにしました。

lev <- levels (df$park)
for (p in lev){
g <- df[which(df$park==p),]
test <- table(g$co1,g$co2)
write.csv(test,(paste("c:\temp\","confuse_",p,".csv",sep='')),row.names=F)
}

capture編集 4: テーブル出力の正確な形式をキャプチャするために、それをテキスト ファイルに送信できることがわかりました。それをcsvとして出力する方が良いでしょうがcapture、これを試みたところ、あまり読みにくいcsvファイルが生成されました。これは、それをキャプチャしてテキスト ファイルに送信するための私のソリューションです。

lev <- levels (df$park)
for (p in lev){
g <- df[which(df$park==p),]
test <- table(g$co1,g$co2)
out <- capture.output(test)
cat(out,file=paste("c:\temp\","confuse_",p,".txt",sep=""),sep="\n",append=TRUE)
}
4

0 に答える 0