« 2015年7月 | トップページ | 2015年9月 »

2015年8月29日 (土)

[R]ファイル名から拡張子を取り除く

ファイル名が代入されている文字列ベクトルから拡張子(文字列の最後が「ピリオド+1以上のピリオド以外の文字列」)を取り除く簡単な方法。

gsub関数を使えばよい。gsub関数は正規表現を用いた文字列の置換が簡単に行える。ベクトルも扱える。以下は使用例。

> st1 <- c("abcd.txt", "efgh", "ijkl.mno.txt")
> st1
[1] "abcd.txt"     "efgh"         "ijkl.mno.txt"
> st2 <- gsub("\\..+$", "", st1)
> st2
[1] "abcd" "efgh" "ijkl"

上記の2番目の例のとおり、拡張子がないものはそのままとなる。3番目の例のとおり、拡張子が複数ある場合はすべて取り除かれる。これを、拡張子を1つだけ取り除きたい、としたいのであれば、正規表現が少々煩雑になるが以下のようにすれば可能。ただし、拡張子は数字(0~9)もしくはアルファベット(A~Z、a~z)であるの場合。

> st3 <- gsub("\\.[0-9A-Za-z]+$", "", st1)
> st3
[1] "abcd"     "efgh"     "ijkl.mno"

2015年8月23日 (日)

[R]日付型データ(Dateオブジェクト)から年月日などの各要素を数値で抜き出す

日付型データ(Dateオブジェクト)から年月日などの各要素を数値で簡単に抜き出すには、POSIXltオブジェクトを使う。DateオブジェクトをPOSIXltオブジェクトに変換して、そこから各要素を抜き出す。

> dt1 <- as.Date("2011-12-13")
> dt2 <- as.POSIXlt(dt1)
> dt2$year + 1900  # 年
[1] 2011
> dt2$mon + 1  # 月
[1] 12
> dt2$mday  # 日
[1] 13
> mode(dt2$mday)
[1] "numeric"

年は得られた値に1900を足す必要がある。また、月を得るためのmonは0から始まる値であり現在の月を得るには1を足す必要があるので、それぞれ注意。

2015年8月22日 (土)

[R]データフレームから条件に一致するレコード(値、行番号)を抽出する

[ ]を使用して条件式により指定をすると、抽出した値を抽出することができる。この場合、戻り値の形式はデータフレーム。[ ]を使用するときの条件式で正規表現を使用したい場合はgrep関数を併用する必要がある。

データフレームから、あるフィールドが特定の値のもの(複数含む)の行番号を得たいときがある。このような場合は、grep関数にデータフレームの列名を指定することで行番号をベクトル形式で得ることができる。

以下、動作例。

> # サンプルのデータフレームを作成
> no <- c(10, 20, 30, 50)
> name <- c("ABC", "BCD", "CDD", "EFG")
> dtf <- data.frame(no, name)
> # nameが"BCD"のレコードを抽出
> dtf[name == "BCD", ]
  no name
2 20  BCD
> # grep関数を併用してnameが"BCD"のレコードを抽出
> dtf[grep("BCD", name), ]
  no name
2 20  BCD
> # nameが"EFG"の行の行番号を抜き出し
> grep("EFG", dtf$name)
[1] 4
> # nameがDで終わる行の行番号を抜き出し
> grep("D$", dtf$name)
[1] 2 3
> # 複数の行番号指定で当該レコードを抜き出し
> dtf[c(2, 3), ]
  no name
2 20  BCD
3 30  CDD

はじめてのR: ごく初歩の操作から統計解析の導入まで RStudioではじめるRプログラミング入門 Rによるデータサイエンス データ解析の基礎から最新手法まで Rによる機械学習 (Programmer's SELECTION) Rによるやさしい統計学 R言語徹底解説 Rによるやさしいテキストマイニング R言語上級ハンドブック

2015年8月21日 (金)

[R]RでTIMSACを使う

パッケージtimsacを使えばよい。

以下はサンプルデータとして含まれているBLSALLFOODデータを使用してdecompにより時系列データの分解を行った例。

> install.packages("timsac")  # パッケージのインストール
(表示省略)
> library(timsac)
> data(Blsallfood)
> decomp(Blsallfood, trade = TRUE, year = 1973)
(いろいろ表示される)

以下のようなグラフが別ウィンドウで表示されるはず。Blsallfoodresult分解された時系列データ(トレンド成分、AR成分、季節変動成分、曜日効果、白色雑音)が表示されている。

2015年8月18日 (火)

[R]エラーメッセージ「package ‘○○’ is available as a source package but not as a binary」

install.packages関数を使用してパッケージのインストールをしようとしたときに、表記のようなエラーメッセージが表示されることがある。

> install.packages("○○")
Installing package into ‘××’
(as ‘lib’ is unspecified)
--- このセッションで使うために、CRAN のミラーサイトを選んでください ---

   package ‘○○’ is available as a source package but not as a binary

(以下、表示省略)

これはそのパッケージがソース形式でのみ配付されているということ。install.packages関数にtypeオプションを使用して実行すればよい。

> install.packages("○○", type = "source")

2015年8月12日 (水)

[R]ベクトルの要素の重複を調べる

ベクトルの要素から重複を取り除くにはunique関数を使えば簡単にできるが、重複している要素番号や重複している要素そのものを知りたいときは、duplicated関数を使う。

ここでいう重複とは、ベクトルの全要素の中で1番目から最後の要素まで順番に見て、以前既に要素にその値が含まれている要素があった場合のこと。重複している個数は2個もあれば3個もある。さらに複数の値で重複していることもある。duplicated関数では重複している要素の値をTRUEで返すのではなく、2番目を含むそれ以降の値についてのみTRUEで返す。つまり、1番目に現れた要素についてはFALSEを返すので、unique関数と同様にduplicated関数を使用することで簡単に重複を取り除くことができる。

以下、実行例。

> # サンプルベクトルを作成
> st <- c("A", "B", "C", "A", "B", "D", "A")
> # 重複の真偽を判定
> (bool <- duplicated(st))
[1] FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE
> # 重複をしている要素の要素番号を抽出
> which(bool)
[1] 4 5 7
> # 重複している要素を表示
> st[duplicated(st)]
[1] "A" "B" "A"
> # 重複している要素から重複を取り除いて表示
> unique(st[duplicated(st)])
[1] "A" "B"
> # 重複をしていない要素の要素番号を抽出
> which(! bool)
[1] 1 2 3 6
> # 重複を取り除いて要素を表示(unique関数と同等)
> st[!duplicated(st)]
[1] "A" "B" "C" "D"

2015年8月 9日 (日)

[R]エラーメッセージ「ソースコードの形でのみ利用可能なパッケージです」

install.packages関数を使用してパッケージのインストールをしようとしたときに、表記のようなエラーメッセージが表示されることがある。

> install.packages("○○")
Installing package into ‘××’
(as ‘lib’ is unspecified)
ソースコードの形でのみ利用可能なパッケージです,C/C++/Fortran
  でコンパイルの必要があるかもしれません : ‘○○’
  These will not be installed

これはそのパッケージがソース形式でのみ配付されているということ。install.packages関数にtypeオプションを使用して実行すればよい。

> install.packages("○○", type = "source")

« 2015年7月 | トップページ | 2015年9月 »

無料ブログはココログ

■■

■■■