【R】データフレームの作成から編集と操作まで

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

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

また、データフレームの検索や抽出に関してはこちらの記事に細かくまとめています。

【R】データフレームのデータを検索・抽出する方法まとめ【dplyr・filter・grep】

データフレームの作成

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

ベクトルからデータフレームを作成する場合は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

参考