« 2014年11月 | トップページ | 2015年1月 »

2014年12月27日 (土)

[R]日付を文字列に簡単に変換する

format関数を使う。format関数はベクトルを扱える。文字列に変換する書式はformatオプションを使うことができる。

> da <- as.Date(c("2014-12-01", "2014-12-31"))
> format(da)
[1] "2014-12-01" "2014-12-31"
> mode(format(da))
[1] "character"
> class(format(da))
[1] "character"
> format(da, format = "%Y/%m/%d")
[1] "2014/12/01" "2014/12/31"

2014年12月26日 (金)

[R]文字列を日付に簡単に変換する

as.Date関数を使う。なお、as.Date関数はベクトルを扱える。

文字列の書式はデフォルトの書式はyyyy-mm-ddとなっている。これ以外の書式で与えるときはformatオプションを使用して書式を明示して与えること。

> st1 <- c("2014-12-01", "2014-12-31")
> as.Date(st1)
[1] "2014-12-01" "2014-12-31"
> st2 <- c("12/01/2014", "12/31/2014")  # アメリカでよく見かける書式
> as.Date(st2)  # 変換に失敗する
[1] "0012-01-20" NA         
> as.Date(st2, format = "%m/%d/%Y")  # 書式を指定
[1] "2014-12-01" "2014-12-31"

改訂3版 R言語逆引きハンドブック RStudioではじめるRプログラミング入門 R統計解析パーフェクトマスター (Perfect Master) Rではじめるデータサイエンス 現場ですぐに使える! R言語プログラミング逆引き大全 350の極意

2014年12月16日 (火)

[R]ggplot2パッケージによる図を、簡単に並べて表示する

gridExtraパッケージのgrid.arrange関数を使えばよい。以下、使用例。

> library(ggplot2)
> library(gridExtra)
> x <- c(1, 2, 3)
> y1 <- c(1, 4, 9)
> y2 <- c(9, 4, 1)
> y3 <- c(4, 4, 5)
> g1 <- qplot(x, y1)
> g2 <- qplot(x, y2)
> g3 <- qplot(x, y3)
> grid.arrange(g1, g2, g3, nrow = 2)

Figure4

2014年12月13日 (土)

[gfortran]エラーメッセージ「imported at (1), is also the name of the current program unit」

    use ××
        1
エラー: '○○' of module '××', imported at (1), is also the name of the current program unit

これは、プログラム名とモジュールに含まれるサブルーチン名が重複していると発生するエラー。このuse文でモジュールを呼び出すプログラムがたとえばabcというプログラムの時(最初のprogram ~の~のところがabc)、その呼び出すモジュールにabcという名前のサブルーチンが含まれている場合、このエラーメッセージが表示されてコンパイルが止まる。

解決するには、重複しているプログラム名とサブルーチン名のどちらかを変えること。

2014年12月10日 (水)

[R]ggplot2によるグラフィックスで、図にPNG形式の画像を貼る

パッケージggplot2によるグラフィックスでは、図にPNG形式の画像を貼ることができる。画像ファイルを貼るには画像ファイルからラスターオブジェクトを作成し、annotation_raster関数を用いることで貼ることができる。

annotation_raster関数の引数は、1番目はラスターオブジェクトを指定し、xmin、xmax、ymin、ymaxオプションには、それぞれ画像を貼り付ける左端、右端、下端、上端のそれぞれの座標を指定すればよい。

以下はカレントフォルダーに以下のようなimage.pngという画像ファイルがある場合の例。

Image_2

> library(ggplot2)
> library(png)
> image <- readPNG("image.png")
> dtf <- data.frame(x = 0:10, y = 0:10)
> g <- ggplot(dtf, aes(x = x, y = y)) + geom_point(size = 9, colour = "red")
> g <- g + annotation_raster(image, xmin = 0, xmax = 1, ymin = 0, ymax = 2)
> g <- g + annotation_raster(image, xmin = 0, xmax = 10, ymin = 1, ymax = 5)
> g <- g + annotation_raster(image, xmin = 8, xmax = 15, ymin = 4, ymax = 11)
> print(g)

結果は以下のとおり。
Image2 上記例のとおり、先に描画したプロット点は上書きされる。先に描画したラスターオブジェクトも上書きで描画される。図枠の外にはみ出た分は描画されない。

画像とannotation_raster関数に指定をした描画範囲の縦横比が異なる場合、画像は適宜伸縮される。

2014年12月 9日 (火)

[R]ggplot2による図の枠線内の描画範囲(軸の範囲)をxlim、ylimで指定をした値きっかりにしたい

ggplot2パッケージでは、xlim関数などを使用して特に意識をしないで図を作成すると、図の枠線内の描画範囲(軸の範囲)は、その外側にある程度余白を付けて描画される。

> library(ggplot2)
> x <- c(1, 2, 3)
> y <- c(1, 4, 9)
> dtf <- data.frame(x, y)
> g <- ggplot(dtf, aes(x = x, y = y)) + geom_point()
> g <- g + xlim(0, 4) + ylim(0, 10)
> print(g)

Figure21
特に何も指定しないと描画範囲が横軸がおおよそ-0.1~4.1、縦軸がおおよそ-0.1~10.1となり、指定した範囲きっかりに描画されない。ここでxlim、ylim関数ではなくcoord_cartesian関数を使用して、縦横それぞれの軸の範囲を指定する。

> g <- ggplot(dtf, aes(x = x, y = y)) + geom_point()
> g <- g + coord_cartesian(xlim = c(0, 4), ylim = c(0, 10))
> print(g)

Figure22
今度は、枠線内は指定した範囲(x:0~4、y:0~10)きっかりに描画されるようになった。

2014年12月 7日 (日)

[R]図の枠線内の描画範囲(軸の範囲)をxlim、ylimオプションで指定をした値きっかりにしたい

plot関数および関係する関数では、図の枠線内の描画範囲(軸の範囲)を指定すると、その外側にある程度余白を付けて描画される。例えば、以下のようにxlimオプションを使用して横軸の範囲を0~4に、ylimオプションを使用して縦軸の範囲を0~10に指定して図を描画すると、以下のようになる。

> x <- c(1, 2, 3)
> y <- c(1, 4, 9)
> plot(x, y, xlim = c(0, 4), ylim = c(0, 10))

 

Figure11図を見てのとおり、図の枠線内の横軸の範囲はおおよそ-0.1~4.1、縦軸はおおよそ-0.1~10.1となり、xlimとylimオプションに指定した範囲きっかりに描画されていない。

軸の範囲を指定した値きっかりにするには、xaxsおよびyaxsオプションに"i"を指定すればよい。

> x <- c(1, 2, 3)
> y <- c(1, 4, 9)
> plot(x, y, xlim = c(0, 4), ylim = c(0, 10), xaxs = "i", yaxs = "i")

Figure12

 

今度は、枠線内は指定した範囲(横軸:0~4、縦軸:0~10)きっかりに描画されるようになった。

xaxs、yaxsオプションは初期状態では"r"となっており、この場合は4%伸張して描画するとplot.windowのヘルプに書かれている(Note that the coordinate ranges will be extended by 4% if the appropriate graphical parameter xaxs or yaxs has value "r" (which is the default). )。

2014年12月 6日 (土)

[R]POSIXltクラスの日付・時刻データを文字列に変換する

strftime関数を使う。なお、この関数はベクトルを扱える。

> dt <- as.POSIXlt("2014-01-02 03:04:05")
> dt <- c(dt, as.POSIXlt("2014-01-02 03:04:06"))
> strftime(dt, "%Y %m %d %H %M %S %Z")
[1] "2014 01 02 03 04 05 JST" "2014 01 02 03 04 06 JST"

補足だが、Dateクラスはsprintf関数で扱えるが、sprintf関数はPOSIXltクラスを扱えないのでstrftime関数を使う必要がある。

2014年12月 5日 (金)

[R]文字列からPOSIXltクラスの日付・時刻データを作成する

as.POSIXlt関数かstrptime関数を使う。as.POSIXlt関数は定型の書式の文字列しか扱えないがstrptime関数は与える文字列の書式をいろいろと変えることができる。

なお、両関数共に文字列ベクトルを扱うことができる。

> st1 <- "2014-01-02 03:04:05"
> st2 <- "2014-01-02T03:04:05"
> st3 <- "2014/01/02 03:04:05"
> as.POSIXlt(st1)
[1] "2014-01-02 03:04:05 JST"
> as.POSIXlt(st2)  # この書式はうまく変換されないので注意
[1] "2014-01-02 JST"
> as.POSIXlt(st3)
[1] "2014-01-02 03:04:05 JST"
> strptime(st1)  # strptime関数はformatオプションが必須
以下にエラー strptime(st1) :
   引数 "format" がありませんし、省略時既定値もありません
> strptime(st1, format = "%Y-%m-%d %H:%M:%S")
[1] "2014-01-02 03:04:05 JST"
> strptime(st2, format = "%Y-%m-%dT%H:%M:%S")
[1] "2014-01-02 03:04:05 JST"
> strptime(st3, format = "%Y/%m/%d %H:%M:%S")
[1] "2014-01-02 03:04:05 JST"

 

> st <- c("2014-01-02 03:04:05", "2014-02-03 04:05:06")
> as.POSIXlt(st)
[1] "2014-01-02 03:04:05 JST" "2014-02-03 04:05:06 JST"
> strptime(st, format = "%Y-%m-%d %H:%M:%S")
[1] "2014-01-02 03:04:05 JST" "2014-02-03 04:05:06 JST"

上記の例のとおり、strptime関数はformatオプションが必須であるため、定型の書式の文字列であればas.POSIXlt関数のほうがよい。

2014年12月 4日 (木)

[R]日付、時刻、タイムゾーンを含む日付を扱う

POSIXltクラスを使う。以下は2014年1月2日3時4分5秒(日本標準時)を文字列で与えてPOSIXltクラス(日付データ)として扱う例。

> dt <- as.POSIXlt("2014-01-02 03:04:05", tz = "Asia/Tokyo")
> dt
[1] "2014-01-02 03:04:05 JST"

なお、Windowsの日本語の環境で起動をしたRであれば通常はタイムゾーンは日本標準時になっているはずなので、タイムゾーンの明記(tzオプション)は特に行う必要はない。

> dt <- as.POSIXlt("2014-01-02 03:04:05")
> dt
[1] "2014-01-02 03:04:05 JST"

2014年12月 2日 (火)

[R]現在の環境の日付とタイムゾーンを得る

日付を得るにはSys.time関数を、タイムゾーンを得るにはSys.timezone関数を使う。なお、Sys.time関数の戻り値のクラスはPOSIXct、Sys.timezoneは文字列である。

> Sys.time()
[1] "2014-11-29 20:55:53 JST"
> class(Sys.time())
[1] "POSIXct" "POSIXt"
> Sys.timezone()
[1] "Asia/Tokyo"
> class(Sys.timezone())
[1] "character"

« 2014年11月 | トップページ | 2015年1月 »

無料ブログはココログ

■■

■■■