裏 RjpWiki

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

文字の出現頻度?

2011年02月15日 | ブログラミング
まあ,これはこれでご立派なのだが

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)))
}

word <- 'abracadabra'
table(strsplit(word, NULL)[[1]]) で十分でしょう

> word <- 'abracadabra'
> table(strsplit(word, NULL)[[1]])

a b c d r
5 2 1 1 2
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

メンバーシップテストって何だ?

2011年02月15日 | ブログラミング
vec <- vector()
for (x in unlist(strsplit("abracadabra", NULL))) {
  if (! x %in% vec) {
    vec <- append(vec, x)
  }
}
print (vec)

[1] "a" "b" "r" "c" "d"


重複を除いた要素を得ることか?

unique(unlist(strsplit("abracadabra", NULL))) が一番簡単。

> unique(unlist(strsplit("abracadabra", NULL)))
[1] "a" "b" "r" "c" "d"

これだと,出現単語表を作ったりすることもできる。

> z <- c("one", "one", "can", "can", "too", "bad")
> unique(z)
[1] "one" "can" "too" "bad"
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ベクトルの最後の要素

2011年02月15日 | ブログラミング

コメントされるのがイヤならば,コメント不許可にしておけばよい。せっかくなのでこちらに書いておく。

> system.time(for (i in 1:100000) {n <- length(x); x[n]})
   ユーザ   システム       経過 
     0.146      0.002      0.147
> system.time(for (i in 1:100000) tail(x, n=1))
   ユーザ   システム       経過 
     4.236      0.020      4.223

tail の中を見てみれば分かるが,いろいろエラー処理などをやっているが,所詮は x[length(x)] をやることになっている。いろいろな余分な処理のためひどく時間が掛かっている。

もう一つの案が次に示すもの。ベクトルを反転させているので時間が掛かる。長いベクトルならそれだけ余計な時間が掛かる。でも,まあ,たいした時間ではない。

> system.time(for (i in 1:100000) rev(x)[1])
   ユーザ   システム       経過 
     1.486      0.007      1.481

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

全角数字列を半角数字列へ

2011年02月15日 | ブログラミング

encoding 依存かな。Mac なら以下も。

> x <- "2008"
> paste(as.character(as.integer(sapply(unlist(strsplit(x, "")), charToRaw)[3,])-9*16), collapse="")
[1] "2008"

> paste(as.character(as.integer(sapply(unlist(strsplit(x, "")), charToRaw)[3,])%%16), collapse="")
[1] "2008"

 

Windows ならば

paste(as.character(as.integer(sapply(unlist(strsplit(x, "")), charToRaw)[2,])-79), collapse="")

 

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

データフレームの左右をひっくり返す

2011年02月15日 | ブログラミング
> (a <- data.frame(x=1:5, y=letters[1:5], z=rnorm(5)))
   x y                  z
1 1 a -0.06277869
2 2 b  0.99328294
3 3 c -1.00593094
4 4 d -0.75098495
5 5 e  1.74401638
> (b <- rev(a))
                    z y x
1 -0.06277869 a 1
2  0.99328294 b 2
3 -1.00593094 c 3
4 -0.75098495 d 4
5  1.74401638 e 5
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

データフレームの天地をひっくり返す

2011年02月15日 | ブログラミング
> (a <- data.frame(x=1:5, y=letters[1:5]))
   x y
1 1 a
2 2 b
3 3 c
4 4 d
5 5 e
> (b <- a[nrow(a):1,])
   x y
5 5 e
4 4 d
3 3 c
2 2 b
1 1 a
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

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

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