[]初めてのR2(データハンドリング)

今回は初めてRで解析する時にほとんどの人が引っかかる、データの扱い方について説明します。

今日は絵とかが無いんで殺風景です。。。

Rのデータはスカラーベクトル、行列、アレイのどれかです。

またそれらは数値、文字、リスト、因子などの属性を持っています(因子はSASでいうclassステートメントで指定することに相当する)。

まずはスカラーからコード例を書いていきます。

a <- 10
a
mode(a)
length(a)

一行目でaに10という数値を格納し、次でaを表示、mode()で属性の表示、length()でaの長さの表示をします。

ちなみに、Rのヘルプを開いたり、exampleコードを実行するには次のように書きます。

?mode
example(mode)

example()とやると、ヘルプの一番下に載っているコードが実行されます(ヘルプをコピペしても同じように実行できます)。

またヘルプのPDFを見たい場合はCRANのsearchにパッケージ名を入れるとPDFファイルが出てきます。

またTask Viewからパッケージまで潜っていってもあります。

データの仕組みの説明に戻りますが、スカラーでも文字や因子があります。

a <- "10"
a
mode(a)

a <- factor("10")
a
mode(a)

前半が文字、後半が因子です(因子の属性ってnumericだったんですね、知らなかった笑)。

次はベクトルです。

a <- c(1:4)
a
mode(a)
length(a)

a <- c("1", "2", "3", "4")
a
mode(a)
length(a)

a <- factor(c(1:4))
a
mode(a)
length(a)

a <- list(c(1, 2, 3, "a"))
a
mode(a)
length(a)

数値、文字、因子、リストの順になっています。

リストの価値がまだ良くわからないんですよね。。。(建前上は数値と文字が混在出来ることが良いらしいですが)

データをread.csvで読み込むときにデータ内に数値と文字が混ざっていると、勝手にリストになってしまいます。

これを解消するには次のようにやって数値に変えましょう。

b <- list(1:4)
as.numeric(b)
do.call("rbind", b)

as.numericはエラーが出たと思います。

私はいつもここで詰まっていたのですが、do.callを使えば数値にできます。

"rbind"は目的に応じて適宜"cbind"に変えて下さい。

次に行列についてです。

データは基本的に行列で扱うので、ここでのハンドリングが重要になってきます。

set.seed(1)
norm <- rnorm(400)
Data <- matrix(norm, nrow=100, ncol=4, byrow=T)
Data
mode(Data)
dim(Data)

set.seed乱数の種を固定、rnormで正規乱数を発生、matrixで行列にしています。

行列は縦×横なのでlengthではなくてdimで大きさをチェックします。

この行列は縦も横も名前が付いてないので次のようにして付けましょう。

colnames(Data) <- c("Height", "BMI", "SBP", "FBS")
colnames(Data)

rownames(Data) <- c(1:nrow(Data))
rownames(Data)

Data[2:10, c(2, 4)]

また、最後のコードで行列の一部だけを抜き出しています。

行列の抜き出しは次のようにしても出来ます。

Data2 <- data.frame(Data)
Data2[Data2$FBS >= 1, 1:2]

一行目でデータフレームにして、二行目で一部抜き出しをしています。

データフレームにしないと$で変数の指定ができないみたいです(詳細は私も分かりませんorz)。

strを使うとデータの詳細を一度でチェックできるので便利です。

str(Data)
str(Data2)

データフレームにするまえのDataは何か変ですね。。

解析するときは、基本的にデータフレームに変換して解析した方が良さそうです。

最後にアレイです。

アレイを自分で作る機会は少ないと思うけど、パッケージの関数を使った時の解析結果はだいたいアレイで入ってるので線形回帰で紹介してみます。

Data2.lm <- lm(BMI~Height, data=Data2)
Data2.lm
names(Data2.lm)
Data2.lm$coefficients

summary(Data2.lm)
names(summary(Data2.lm))
summary(Data2.lm)$coefficients
summary(Data2.lm)$coefficients[, 4]

今回の例は線形回帰ですが、解析結果は一行目でData2.lmに格納されてます。

namesで中身の名前をチェックできるので、$を使って行列の変数のように抜き出します。

またnamesはヘルプのvalueのところにも書いてあります。

?lm

のvalueの欄を見てみてください。

時間がなくなってきたので、とりあえずこの辺で。

下のサイト(RjpWiki)もいろいろ役に立ちます↓

http://www.okada.jp.org/RWiki/

ページTOPへ