本文へスキップ
からだにいいもの

Rのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。

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

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

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

スポンサーリンク
Prices and shipping availability may change. Please refer to the product page at time of purchase.
Content displayed on this site is provided by Amazon and may be updated or removed.
Amazon Associate, karada-good earns income through qualifying sales.