私は時々、ftable
の機能を純粋に階層的なカテゴリの提示のために使用します。ただし、テーブルが大きい場合は、使用する前にテーブルをさらにサブセット化したい場合もあります。データを抽出するために「ftable」の属性を使用する
は、我々が始まるしているとしましょう:
mytable <- ftable(Titanic, row.vars = 1:3)
mytable
## Survived No Yes
## Class Sex Age
## 1st Male Child 0 5
## Adult 118 57
## Female Child 0 1
## Adult 4 140
## 2nd Male Child 0 11
## Adult 154 14
## Female Child 0 13
## Adult 13 80
## 3rd Male Child 35 13
## Adult 387 75
## Female Child 17 14
## Adult 89 76
## Crew Male Child 0 0
## Adult 670 192
## Female Child 0 0
## Adult 3 20
str(mytable)
## ftable [1:16, 1:2] 0 118 0 4 0 154 0 13 35 387 ...
## - attr(*, "row.vars")=List of 3
## ..$ Class: chr [1:4] "1st" "2nd" "3rd" "Crew"
## ..$ Sex : chr [1:2] "Male" "Female"
## ..$ Age : chr [1:2] "Child" "Adult"
## - attr(*, "col.vars")=List of 1
## ..$ Survived: chr [1:2] "No" "Yes"
## NULL
何dimnames
がないので、私は私がdimnames
を持つオブジェクトの場合と同じ方法でデータを抽出することはできません。たとえば、 "1st"クラスと "3rd"クラスからすべての "Child"値を直接抽出する方法はありません。
私の現在のアプローチは、table
に変換し、抽出してftable
に変換することです。
例:
mytable[c("1st", "3rd"), , "Child", ]
## Error: incorrect number of dimensions
## Only the underlying data are seen as having dims
dim(mytable)
## [1] 16 2
## I'm OK with the "Age" column being dropped in this case....
ftable(as.table(mytable)[c("1st", "3rd"), , "Child", ])
## Survived No Yes
## Class Sex
## 1st Male 0 5
## Female 0 1
## 3rd Male 35 13
## Female 17 14
注意しないなら、全体のレイアウトが時々変わるのでしかし、私はこのアプローチを好みません。私は、行と列の全体的なレイアウトが変更されたことを好きではない
ftable(as.table(mytable)[c("1st", "3rd"), , , "No"])
## Age Child Adult
## Class Sex
## 1st Male 0 118
## Female 0 4
## 3rd Male 35 387
## Female 17 89
:子供だけをサブセット化の要件を削除し、生存しなかったサブセットのみの要件を追加し、以下、とそれを比較してください。これは、単一の列が抽出されたときの寸法を維持するためにdrop = FALSE
を使用することを覚えておくことの古典的なケースです:
ftable(as.table(mytable)[c("1st", "3rd"), , , "No", drop = FALSE])
## Survived No
## Class Sex Age
## 1st Male Child 0
## Adult 118
## Female Child 0
## Adult 4
## 3rd Male Child 35
## Adult 387
## Female Child 17
## Adult 89
データを作成してftable
としていますが、この質問ではそれは不可能と仮定しましょう。
最終的な目標は、ネストされた「行」階層の表示形式を維持してftable
から抽出できるようにするアプローチです。
他の解決方法はありますか? row.vars
とcol.vars
属性を使用してftable
からデータを抽出し、フォーマットを保持できますか?
私の現在のアプローチは、階層の列では動作しませんので、私は提案された解決策はまた、これらのケースを扱うことができることを願っています。
例:
tab2 <- ftable(Titanic, row.vars = 1:2, col.vars = 3:4)
tab2
## Age Child Adult
## Survived No Yes No Yes
## Class Sex
## 1st Male 0 5 118 57
## Female 0 1 4 140
## 2nd Male 0 11 154 14
## Female 0 13 13 80
## 3rd Male 35 13 387 75
## Female 17 14 89 76
## Crew Male 0 0 670 192
## Female 0 0 3 20
注 "年齢" と "生き残った" のネスティング。
は私の現在のアプローチを試してみてください:
ftable(as.table(tab2)[c("1st", "3rd"), , , , drop = FALSE])
## Survived No Yes
## Class Sex Age
## 1st Male Child 0 5
## Adult 118 57
## Female Child 0 1
## Adult 4 140
## 3rd Male Child 35 13
## Adult 387 75
## Female Child 17 14
## Adult 89 76
私は戻って私が欲しいものを得ることができます:
ftable(as.table(tab2)[c("1st", "3rd"), , , , drop = FALSE], row.vars = 1:2, col.vars = 3:4)
しかし、私はより直接的な何かを願っています。ここで
私はこれまでに道を歩いています。私は生データをサブセット化し、その上に 'ftable'を使います。 –
@RomanLuštrik、あなたは共有したい進歩をしましたか?私は 'ftable 'が好きですが、それはあまりにも無視されているように悲しいです。それは適切な 'as.data.frame'メソッドを持っていません.... – A5C1D2H2I1M1N2O1R2T1
コンソールでの出力を見直すか、文書で使用するためにこのテーブルをフォーマットしようとしていますか?あなたは 'ftable 'を使用しない代わりのアプローチには開いていますか? –