裏 RjpWiki

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

ちょっとしたことをやるだけなのだ

2015年02月05日 | ブログラミング

ちょっとしたことをやるだけなのに,わざわざパッケージを呼ぶなんて。

"How to Get the Frequency Table of a Categorical Variable as a Data Frame in R" だが,要するに,「度数分布表をデータフレームで返す関数 plyr:::count がいいよ!」ってことですな。

たとえば,iris データセットの Species の度数分布を知りたいとすると,

> ( w = table(iris$Species) )

    setosa versicolor  virginica
        50         50         50
> ( t = data.frame(w) ) # as.data.frame でなくてよい
        Var1 Freq
1     setosa   50
2 versicolor   50
3  virginica   50
> names(t)[1] = "Species" # 上の t の列名がイヤだというのだ
> t
     Species Freq
1     setosa   50
2 versicolor   50
3  virginica   50

のようにしなきゃいけなくて,面倒!!ということのようだ。
plyr を使えば,簡単だよ!!!って。

> library(plyr)
> count(iris, 'Species') # なんで 列名を文字列で指定する?
     Species freq
1     setosa   50
2 versicolor   50
3  virginica   50

おやおや。だなあ。

列名がイヤなら,table じゃなくて,xtabs を使えって,中澤さんも言ってるよ。
データフレーム名も情報に含んでくれるぞ(table 使いたきゃ,dnn を指定せよ)。
2 つくらいの関数を使うのを面倒というなら,関数化しておけ。

> data.frame(xtabs(~iris$Species))
  iris.Species Freq
1       setosa   50
2   versicolor   50
3    virginica   50

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

久しぶりに 裏 RjpWiki

2015年02月05日 | 裏 RjpWiki

baloonplotの行名を並び替えたい」だが,細かいが気になることが満載だ

まず,日本語がだめ。「並び替え」ではなく「並べ替え」だ。

また,行名と列名について,間違って反対に覚えている。

次いで,R のプログラムだが,sample(c(1:16), 100, replace=TRUE)
c(1:16) ってのが 1:16 と同じであることを分かっていない。それを直したとして,
sample(1:16, 100, replace=TRUE)は,遅い。以下のようにする。
sample(16, 100, replace=TRUE)とすべし。理由は sample のソースを見ればわかる。さすれば,
sample(c(0:25), 100, replace=TRUE)と同じ結果を得るための最適コードは,
sample(26, 100, replace=TRUE) - 1だな。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村