裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

要素数の異なる list の要素の度数分布

2010年08月20日 | ブログラミング
いつもの,石田さんのページ

要素の長さが違うリストからテーブルを作る 

もっとエレガントな方法(関数)があったような。

> 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
コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« なぜそうなるのか,私には説... | トップ | tally mark »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事