Rで解析:data.frameの操作が楽々な「tidyr」パッケージ

Rの解析に役に立つ記事

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

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

タイトルとURLをコピーしました