いつもの,石田さんのページ
要素の長さが違うリストからテーブルを作る
もっとエレガントな方法(関数)があったような。
> a <- c("A","A", "B", "A")
> b <- c("A","B", "C", "A", "B")
> c <- c("C","A", "C", "B", "A", "B")
>
> abc <- list(a,b,c)
> names(abc) <- c("あ","い","う")
> abc
$あ
[1] "A" "A" "B" "A"
$い
[1] "A" "B" "C" "A" "B"
$う
[1] "C" "A" "C" "B" "A" "B"
>
> abc2 <- lapply(abc, table)
> abc2
$あ
A B
3 1
$い
A B C
2 2 1
$う
A B C
2 2 2
> abc3 <- lapply(abc2, data.frame)
> abc3
$あ
Var1 Freq
1 A 3
2 B 1
$い
Var1 Freq
1 A 2
2 B 2
3 C 1
$う
Var1 Freq
1 A 2
2 B 2
3 C 2
> library(reshape)
要求されたパッケージ plyr をロード中です
> melt(abc3)
Using Var1 as id variables
Using Var1 as id variables
Using Var1 as id variables
Var1 variable value L1
1 A Freq 3 あ
2 B Freq 1 あ
3 A Freq 2 い
4 B Freq 2 い
5 C Freq 1 い
6 A Freq 2 う
7 B Freq 2 う
8 C Freq 2 う
あまりエレガントでもなく,代わり映えしないが,一応 1 行で書ける。
> data.frame(table(stack(abc)))
values ind Freq
1 A あ 3
2 B あ 1
3 C あ 0
4 A い 2
5 B い 2
6 C い 1
7 A う 2
8 B う 2
9 C う 2
Freq = 0 の行が含まれるけど,それを除くのは容易。
> x <- data.frame(table(stack(abc)))
> subset(x, x$Freq != 0)
values ind Freq
1 A あ 3
2 B あ 1
4 A い 2
5 B い 2
6 C い 1
7 A う 2
8 B う 2
9 C う 2