読者です 読者をやめる 読者になる 読者になる

Rによるデータフレームの作成から編集と操作まで

今回はRを使ってデータフレームの作成やデータッフレームの編集などをやっていきたいとおもいます。

僕もまだまだど素人ですので、何か間違いなどありましたらご指摘していただけると幸いです。

データフレームの作成

ベクトルからデータフレームを作成する

ベクトルからデータフレームを作成する場合はdata.frame()を使います。

#ベクトル作成
>x <- c("A","B","C")
>y <- 1:3
>data <- data.frame(x,y)
>data

  x y
1 A 1
2 B 2
3 C 3

基本的にこれだけの操作でデータフレームを作成することが可能です。

データ構造の情報を得る

オブジェクトやデータ構造に関する情報を知るには

データフレームを操作している時に必要になってくるのが、データ構造の中身を見ることです。
データ構造に就てしりたい場合にはstr()関数を使います。

分析を行っている最中に様々なエラーが発生することは多々あります。
その際に何が原因でエラーが起きているのかを把握する際にデータフレームの構造を見ることで解決することもありますので、この機会に覚えておくと良いでしょう。

>str(ToothGrowth)

'data.frame':	60 obs. of  3 variables:
 $ len : num  4.2 11.5 7.3 5.8 6.4 10 11.2 11.2 5.2 7 ...
 $ supp: Factor w/ 2 levels "OJ","VC": 2 2 2 2 2 2 2 2 2 2 ...
 $ dose: num  0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 ...

この出力からわかることは、ToothGrowthはlen、supp、doseの3列を持つデータフレームであることがわかります。また、lenとdoseは数値型で、suppはファクタであることがわかります。

データフレームに列を追加する

データフレームに新しく列を追加する際には新しい列に値を代入するだけで大丈夫です。

> tg <- ToothGrowth
> head(tg)

   len supp dose
1  4.2   VC  0.5
2 11.5   VC  0.5
3  7.3   VC  0.5
4  5.8   VC  0.5
5  6.4   VC  0.5
6 10.0   VC  0.5

#データフレームtgに新しい列newcolを追加する
> tg$newcol <- NA
> head(tg)

   len supp dose newcol
1  4.2   VC  0.5     NA
2 11.5   VC  0.5     NA
3  7.3   VC  0.5     NA
4  5.8   VC  0.5     NA
5  6.4   VC  0.5     NA
6 10.0   VC  0.5     NA

データフレームから列を削除する

データフレームから列を削除する場合は、削除したい列にNULLを代入します。

> tg$newcol <- NULL
> head(tg)

   len supp dose
1  4.2   VC  0.5
2 11.5   VC  0.5
3  7.3   VC  0.5
4  5.8   VC  0.5
5  6.4   VC  0.5
6 10.0   VC  0.5

これで先ほど追加した列が削除されました。

subset()関数を使ってデータフレームの一部を取り出す

最後にデータフレームないの一部のデータを取り出す方法を紹介します。

subset()関数を使うことで、特定の条件を満たす行だけを抜き出したり、特定の列だけを取り出したりすることができます。
今回はgcookbookパッケージ内にあるclimateのデータセットを使ってみましょう。
gcookbookをインストールしていない方は下記をコピペしてインストールしてください。

>install.packages("gcookbook")
>library(gcookbook)
> head(climate)

    Source Year Anomaly1y Anomaly5y Anomaly10y Unc10y
Berkeley 1800        NA        NA     -0.435  0.505
Berkeley 1801        NA        NA     -0.453  0.493 
Berkeley 1802        NA        NA     -0.460  0.486
Berkeley 1803        NA        NA     -0.493  0.489
Berkeley 1804        NA        NA     -0.536  0.483
Berkeley 1805        NA        NA     -0.541  0.475
・・・・
CRUTEM3 2006  0.761300000           NA  0.734500000     NA
CRUTEM3 2007  0.770300000           NA           NA     NA
CRUTEM3 2008  0.620300000           NA           NA     NA
CRUTEM3 2009  0.734300000           NA           NA     NA
CRUTEM3 2010  0.802300000           NA           NA     NA
CRUTEM3 2011  0.619300000           NA           NA     NA

それでは列名Sourceの"Berkeley"だけの行に絞り、YearとAnomaly10yの列だけを取り出してみましょう。

> climate.s <- subset(climate, Source == "Berkeley", select = c(Year, Anomaly10y))
> head(climate.s)

  Year Anomaly10y
1 1800     -0.435
2 1801     -0.453
3 1802     -0.460
4 1803     -0.493
5 1804     -0.536
6 1805     -0.541
広告を非表示にする