data.frameの操作が楽々な「tidyr」パッケージの紹介です。一部「dplyr」パッケージを使用しています。dplyrも非常に便利です。
パッケージバージョンは0.4.1。実行コマンドはwindows 7のR version 3.2.5およびOS X 10.11.2のR version 3.2.4で確認しています。
パッケージのインストール
下記コマンドを実行してください。
#パッケージのインストール
install.packages("tidyr")
実行コマンドの紹介
詳細はコマンド内を確認ください。
#パッケージの読み込み
library("tidyr")
###データ例の作成#####
n <- 30
TestData <- data.frame(Group = sample(paste0("ID", 1:5), n, replace = TRUE),
Data1 = sample(c(1:15, NA), n, replace = TRUE),
Data2 = sample(c(0, 1, NA), n, replace = TRUE))
#内容表示
head(TestData)
Group Data1 Data2
1 ID1 7 1
2 ID1 13 NA
3 ID5 9 1
4 ID3 NA 0
5 ID2 6 1
6 ID4 4 NA
#要約
summary(TestData)
Group Data1 Data2
ID1:3 Min. : 1.00 Min. :0.0
ID2:7 1st Qu.: 5.00 1st Qu.:0.0
ID3:9 Median : 7.00 Median :0.5
ID4:6 Mean : 7.84 Mean :0.5
ID5:5 3rd Qu.:12.00 3rd Qu.:1.0
Max. :15.00 Max. :1.0
NA's :5 NA's :10
########
#指定列の欠損値を除く:completeコマンド
CompData <- complete(data = TestData, Data2)
#要約
summary(CompData)
Data2 Group Data1
Min. :0.0 ID1:2 Min. : 1.00
1st Qu.:0.0 ID2:5 1st Qu.: 5.75
Median :0.5 ID3:6 Median : 6.50
Mean :0.5 ID4:2 Mean : 7.25
3rd Qu.:1.0 ID5:5 3rd Qu.: 9.00
Max. :1.0 Max. :13.00
NA's :4
#NAを除き指定した列の全組み合わせを作成:expandコマンド
ExData <- expand(TestData, Group, Data2)
#表示
ExData
Source: local data frame [10 x 2]
Group Data2
(fctr) (dbl)
1 ID1 0
2 ID1 1
3 ID2 0
4 ID2 1
5 ID3 0
6 ID3 1
7 ID4 0
8 ID4 1
9 ID5 0
10 ID5 1
#NAを含む指定した列の全組み合わせを作成:nestingコマンド
#expandコマンドと組み合わせて使用しています
NesExData <- expand(TestData, nesting(Group, Data2))
#表示
head(NesExData)
Source: local data frame [6 x 2]
Group Data2
(fctr) (dbl)
1 ID1 0
2 ID1 1
3 ID1 NA
4 ID2 0
5 ID2 1
6 ID2 NA
#基準を元にカテゴリおよび値データを縦方向に並べる;gatherコマンド
#基準を設定:"-"をデータ名に付与する
#処理後のカテゴリデータ名:keyオプション
#処理後の値名:valueオプション
GatherData <- gather(data = TestData, key = "Label",
value = "value", -Group)
#参考:ここまでを%>%で処理
#GatherData <- GatherData %>% gather(key = "Label", value = "value", -Group)
#確認
GatherData[c(1:3, 57:60),]
ID Group Label value
(chr) (fctr) (chr) (chr)
1 1 ID1 ID 1
2 2 ID1 ID 2
3 3 ID5 ID 3
4 57 ID2 ID 57
5 58 ID3 ID 58
6 59 ID2 ID 59
7 60 ID2 ID 60
#基準を元にデータを横方向に並べる:spreadコマンド
#データに識別番号が無いとエラーになります
#install.packages("dplyr")
#ライブラリの読み込み
library("dplyr")
#dplyrパッケージのadd_rownamesコマンドでIDを付与
GatherData <- add_rownames(GatherData, var = "ID")
#処理
SprData <- spread(GatherData, key = "Label", value = "value")
#dplyrパッケージのarrangeコマンドで昇順に並び替え
#文字列IDをtype.convertで数値化
SprData <- arrange(SprData, type.convert(ID))
#参考:ここまでを%>%で処理
#SprData <- GatherData %>% add_rownames(var = "ID") %>%
#spread(key = "Label", value = "value") %% arrange(type.convert(ID))
#確認
SprData[c(1:3, 57:60),]
ID Group Data1 Data2
(chr) (fctr) (dbl) (dbl)
1 1 ID1 7 NA
2 2 ID1 13 NA
3 3 ID5 9 NA
4 57 ID2 NA NA
5 58 ID3 NA NA
6 59 ID2 NA 0
7 60 ID2 NA 1
少しでも、あなたのウェブや実験の解析が楽になりますように!!