[R]文字数の出現頻度を数える

R で文字数の出現頻度を数える
ふとやってみたくなったので、リファレンス片手にやってみた。
ハッシュ型は、環境変数を経由する方法でしか見つけられなかった。
普段から R を書き慣れている人はこんな書き方しないのだろうけど。

hash <- new.env(hash=TRUE, parent=emptyenv())
word <- 'abracadabra'
for (c in strsplit(word, NULL)[[1]]) {
  if (exists(c, hash)) {
    assign(c, get(c, hash) + 1, hash)
  } else {
    assign(c, 1, hash)
  }
}

for (c in ls(hash)) {
  cat(sprintf ('%s : %d\n', c, get(c, hash)))
}

一番手間取ったのは、文字列を 配列に変換する方法(文字列の分割)

strsplit(word, NULL)[[1]]

のインデックス操作は非R使いには浮かばない。


■Python 編
Python 2.7 なら collections.Counter があるので超簡単

>>> from collections import Counter
>>> for letter in 'abracadabra':
...   c[letter] += 1
...
>>> print c
Counter({'a': 5, 'r': 2, 'b': 2, 'c': 1, 'd': 1})
Advertisements
Tagged with: , , , , ,
Posted in python, R
3 comments on “[R]文字数の出現頻度を数える
  1. foo says:

    > table(strsplit(word, NULL)[[1]])

    a b c d r
    5 2 1 1 2

    • siguniang says:

      コメントありがとうございます。
      table を使うとひじょうにエレガントにできますね。
      まったく思いつきませんでした。

  2. […] https://siguniang.wordpress.com/2010/06/10/r%E6%96%87%E5%AD%97%E6%95%B0%E3%81%AE%E5%87%BA%E7%8F%BE%E9… Share this:TwitterFacebookLike this:Like一番乗りで「Like」しませんか。 from → 統計学, R ← thinkpad x200sのバッテリーヒンジの修理 コメントはまだありません […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Archives
%d bloggers like this: