Rで解析:データフレームに関する基本的なコマンドの復習です


データフレームはRでよく使う形式です。データフレームでよく使用する基本的なコマンドをまとめました。Rのデータフレームはエクセルのような行列に見えますが、実は行列をもつリストとなります。しかし、リストと異なり各列は同じ長さのベクトルが必要ですので注意が必要です。

パッケージの追加なくコマンドは使用することができます。
コマンドはR version 3.2.0で確認しています。


実行コマンドの紹介

詳細はコメントを確認してください。

#データフレームの作成:data.frame(列名 = データ, ...)
#文字列を因子(factor)にしない場合はI(データ)とします
TestData <- data.frame(Group = paste0("TEST", c(1:5)),
                       Data1 = sample(1:500, 10),
                       Data2 = sample(200:300, 10))
TestData
  Group Data1 Data2
1  TEST1   482   208
2  TEST2   410   224
3  TEST3   462   281
4  TEST4   381   238
5  TEST5   262   248
6  TEST1   217   221
7  TEST2   125   246
8  TEST3   233   260
9  TEST4    45   270
10 TEST5    95   243

#データフレームの内容を確認
#構造を確認:str(データフレーム名)
#一行目が文字列ではなく因子になっています
str(TestData)
'data.frame':	10 obs. of  3 variables:
$ Group: Factor w/ 5 levels "TEST1","TEST2",..: 1 2 3 4 5 1 2 3 4 5
$ Data1: int  482 410 462 381 262 217 125 233 45 95
$ Data2: int  208 224 281 238 248 221 246 260 270 243

#サマリー:summary(データフレーム名)
#行毎の要約です
summary(TestData)
Group       Data1           Data2      
TEST1:2   Min.   : 45.0   Min.   :208.0  
TEST2:2   1st Qu.:148.0   1st Qu.:227.5  
TEST3:2   Median :247.5   Median :244.5  
TEST4:2   Mean   :271.2   Mean   :243.9  
TEST5:2   3rd Qu.:402.8   3rd Qu.:257.0  
          Max.   :482.0   Max.   :281.0

#データフレームから抽出:subset(データフレーム名, 抽出条件, select = 行を指定)
#例:2行目を基準にデータから2の倍数を抽出
subset(TestData, TestData[, 2] %% 2 == 0)
  Group Data1 Data2
1 TEST1   482   208
2 TEST2   410   224
3 TEST3   462   281
5 TEST5   262   248

#例:1行目のデータを基準にTEST1と5を抽出
#%in%を使用します
subset(TestData, TestData[, 1] %in% c("TEST1", "TEST5"))
    Name  D1  D2
1  TEST1 482 208
5  TEST5 262 248
6  TEST1 217 221
10 TEST5  95 243

#例:2行目のデータから400以上を抽出
subset(TestData, TestData[, 2] > 400)
  Group Data1 Data2
1 TEST1   482   208
2 TEST2   410   224
3 TEST3   462   281

#例:2行目のデータから2の倍数に対応する3行目を抽出
subset(TestData, TestData[, 2] %% 2 == 0, select = colnames(TestData[3]))
  Data2
1   208
2   224
3   281
5   248

#データフレームを結合する
#横に結合:cbind(データフレーム名, データフレーム名)
cbind(TestData, TestData)
   Group Data1 Data2 Group Data1 Data2
1  TEST1   482   208 TEST1   482   208
2  TEST2   410   224 TEST2   410   224
3  TEST3   462   281 TEST3   462   281
4  TEST4   381   238 TEST4   381   238
5  TEST5   262   248 TEST5   262   248
6  TEST1   217   221 TEST1   217   221
7  TEST2   125   246 TEST2   125   246
8  TEST3   233   260 TEST3   233   260
9  TEST4    45   270 TEST4    45   270
10 TEST5    95   243 TEST5    95   243 

#縦に結合:rbind(データフレーム名, データフレーム名)
rbind(TestData, TestData)
   Group Data1 Data2
1  TEST1   482   208
2  TEST2   410   224
省略...
19 TEST4    45   270
20 TEST5    95   243

#重複する行で結合:merge(データフレーム名, データフレーム名, by = 行名)
merge(TestData, TestData, by = c(colnames(TestData[1])))
  Group Data1.x Data2.x Data1.y Data2.y
1  TEST1     482     208     482     208
2  TEST1     482     208     217     221
省略...
19 TEST5      95     243     262     248
20 TEST5      95     243      95     243

#行毎の和:colSums(データフレーム名, na.rm = FALSE)
#欠損値はna.rm = TRUEで指定します
colSums(TestData[, 2:3])
Data1 Data2 
2712  2439 

#行毎の平均:colMeans(データフレーム名, na.rm = FALSE)
#欠損値はna.rm = TRUEで指定します
colMeans(TestData[, 2:3])
Data1 Data2 
271.2 243.9

#列毎に和:rowSums(データフレーム名, na.rm = FALSE)
#欠損値はna.rm = TRUEで指定します
rowSums(TestData[, 2:3])
[1] 690 634 743 619 510 438 371 493 315 338

#列毎の平均:rowMeans(データフレーム名, na.rm = FALSE)
#欠損値はna.rm = TRUEで指定します
rowMeans(TestData[, 2:3])
[1] 345.0 317.0 371.5 309.5 255.0 219.0 185.5 246.5 157.5 169.0

#重複を取り除く:uniqueコマンド
TestData[unique(TestData[, 1]),]
  Group Data1 Data2
1 TEST1   482   208
2 TEST2   410   224
3 TEST3   462   281
4 TEST4   381   238
5 TEST5   262   248

#先頭を表示:headコマンド
head(TestData)
  Group Data1 Data2
1 TEST1   482   208
2 TEST2   410   224
3 TEST3   462   281
4 TEST4   381   238
5 TEST5   262   248
6 TEST1   217   221

#末尾を表示:tailコマンド
tail(TestData)
   Group Data1 Data2
5  TEST5   262   248
6  TEST1   217   221
7  TEST2   125   246
8  TEST3   233   260
9  TEST4    45   270
10 TEST5    95   243

#行名を変更:colnamesコマンド
colnames(TestData) <- c("Name", "D1", "D2")
   Name  D1  D2
1  TEST1 482 208
2  TEST2 410 224
3  TEST3 462 281
4  TEST4 381 238
5  TEST5 262 248
6  TEST1 217 221
7  TEST2 125 246
8  TEST3 233 260
9  TEST4  45 270
10 TEST5  95 243

#列名を変更:rownamesコマンド
rownames(TestData) <- paste0("Test", 1:10)
           Name  D1  D2
Test1  TEST1 482 208
Test2  TEST2 410 224
Test3  TEST3 462 281
Test4  TEST4 381 238
Test5  TEST5 262 248
Test6  TEST1 217 221
Test7  TEST2 125 246
Test8  TEST3 233 260
Test9  TEST4  45 270
Test10 TEST5  95 243

少しでも、あなたのウェブや実験の解析が楽になりますように!!

スポンサードリンク

おすすめコンテンツ


スポンサードリンク