行列を要約する方法を定義する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)
}