« 2017年4月 | トップページ | 2017年6月 »

2017年5月23日 (火)

[R]指定の列の値でデータフレームをソートする

order関数を使う。order関数は並び替えられたインデックスを返すので、並び替えられたデータフレームを作成するには、元のデータフレームにその戻り値のインデックスを指定すればよい。

以下は、3行2列のデータフレームを、2列目の数値でソートした例。order関数はデフォルトでは昇順にソートする。これを降順にしたいのであれば、decreasingオプションをTRUEにする必要がある。

> dtf <- data.frame(V1 = c("A", "B", "C"), V2 = c(1, 3, 2))
> dtf
  V1 V2
1  A  1
2  B  3
3  C  2
> order(dtf$V2)
[1] 1 3 2
> order(dtf$V2, decreasing = TRUE)
[1] 2 3 1
> dtf[order(dtf$V2), ]
  V1 V2
1  A  1
3  C  2
2  B  3

2017年5月19日 (金)

[R]文字ベクトル内の文字を簡単に連結する

paste関数を使えばよい。ただし、paste関数はデフォルトでは与えられた文字をベクトルで処理しようとするので注意。

以下は失敗例。

> st <- c("A", "B", "C")
> paste(st)
[1] "A" "B" "C"

単純に与えた文字ベクトルを連結するにはcollapseオプションを使う。

> paste(st, collapse = "")
[1] "ABC"
> paste(st, collapse = ",")
[1] "A,B,C"

何も与えなければ間に何も挟まずに連結する。文字を指定すると、その文字を挟んで連結する。

2017年5月17日 (水)

[R]grepの正規表現のパターンに文字列を使用する

grep等の関数で正規表現による抽出を行う時に、その正規表現パターンに文字列を使用したい時がある。例えば、以下の例では、文字列に「A」か「F」が含まれている文字列を抽出している。この「A」と「F」を直接指定するのではなく、文字列で指定をする方法。

> v <- c("ABC", "DEF", "GHI")
> grep("[AF]", v, value = TRUE)
[1] "ABC" "DEF"

簡単に行うことはできないが、eval関数とparse関数を組み合わせた、文字列をRの命令として実行する方法を使えば行える。

> keyword <- "[AF]"
> st <- sprintf("grep(\"%s\", v, value = TRUE)", keyword)
> eval(parse(text = st))
[1] "ABC" "DEF"
> keyword <- "[F-G]"
> st <- sprintf("grep(\"%s\", v, value = TRUE)", keyword)
> eval(parse(text = st))
[1] "DEF" "GHI"

上記の例では、文字ベクトルkeywordに正規表現パターンを文字列として格納し、その文字列をeval関数とparse関数を組み合わせて命令として実行している。

2017年5月15日 (月)

[R]文字列をRの命令として実行する

eval関数とparse関数を組み合わせて使う。以下は、文字列によりベクトルv1とv2を作成した例。

> v1
エラー:  オブジェクト 'v1' がありません
> v2
エラー:  オブジェクト 'v2' がありません
> eval(parse(text = "v1 <- c(1, 2)"))
> v1
[1] 1 2
> st <- "v2 <- c(3, 4)"
> eval(parse(text = st))
> v2
[1] 3 4

 

 

« 2017年4月 | トップページ | 2017年6月 »

無料ブログはココログ

■■

■■■