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))
#&#20869;&#23481;&#34920;&#31034;
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
#&#35201;&#32004;
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 
########

#&#25351;&#23450;&#21015;&#12398;&#27424;&#25613;&#20516;&#12434;&#38500;&#12367;:complete&#12467;&#12510;&#12531;&#12489;
CompData <- complete(data = TestData, Data2)
#&#35201;&#32004;
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&#12434;&#38500;&#12365;&#25351;&#23450;&#12375;&#12383;&#21015;&#12398;&#20840;&#32068;&#12415;&#21512;&#12431;&#12379;&#12434;&#20316;&#25104;:expand&#12467;&#12510;&#12531;&#12489;
ExData <- expand(TestData, Group, Data2)
#&#34920;&#31034;
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&#12434;&#21547;&#12416;&#25351;&#23450;&#12375;&#12383;&#21015;&#12398;&#20840;&#32068;&#12415;&#21512;&#12431;&#12379;&#12434;&#20316;&#25104;:nesting&#12467;&#12510;&#12531;&#12489;
#expand&#12467;&#12510;&#12531;&#12489;&#12392;&#32068;&#12415;&#21512;&#12431;&#12379;&#12390;&#20351;&#29992;&#12375;&#12390;&#12356;&#12414;&#12377;
NesExData <- expand(TestData, nesting(Group, Data2))
#&#34920;&#31034;
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

#&#22522;&#28310;&#12434;&#20803;&#12395;&#12459;&#12486;&#12468;&#12522;&#12362;&#12424;&#12403;&#20516;&#12487;&#12540;&#12479;&#12434;&#32294;&#26041;&#21521;&#12395;&#20006;&#12409;&#12427;;gather&#12467;&#12510;&#12531;&#12489;
#&#22522;&#28310;&#12434;&#35373;&#23450;:"-"&#12434;&#12487;&#12540;&#12479;&#21517;&#12395;&#20184;&#19982;&#12377;&#12427;
#&#20966;&#29702;&#24460;&#12398;&#12459;&#12486;&#12468;&#12522;&#12487;&#12540;&#12479;&#21517;:key&#12458;&#12503;&#12471;&#12519;&#12531;
#&#20966;&#29702;&#24460;&#12398;&#20516;&#21517;:value&#12458;&#12503;&#12471;&#12519;&#12531;
GatherData <- gather(data = TestData, key = "Label",
                     value = "value", -Group)
#&#21442;&#32771;:&#12371;&#12371;&#12414;&#12391;&#12434;%>%&#12391;&#20966;&#29702;
#GatherData <- GatherData %>% gather(key = "Label", value = "value", -Group)
#&#30906;&#35469;
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

#&#22522;&#28310;&#12434;&#20803;&#12395;&#12487;&#12540;&#12479;&#12434;&#27178;&#26041;&#21521;&#12395;&#20006;&#12409;&#12427;:spread&#12467;&#12510;&#12531;&#12489;
#&#12487;&#12540;&#12479;&#12395;&#35672;&#21029;&#30058;&#21495;&#12364;&#28961;&#12356;&#12392;&#12456;&#12521;&#12540;&#12395;&#12394;&#12426;&#12414;&#12377;
#install.packages("dplyr")
#&#12521;&#12452;&#12502;&#12521;&#12522;&#12398;&#35501;&#12415;&#36796;&#12415;
library("dplyr")
#dplyr&#12497;&#12483;&#12465;&#12540;&#12472;&#12398;add_rownames&#12467;&#12510;&#12531;&#12489;&#12391;ID&#12434;&#20184;&#19982;
GatherData <- add_rownames(GatherData, var = "ID")
#&#20966;&#29702;
SprData <- spread(GatherData, key = "Label", value = "value")
#dplyr&#12497;&#12483;&#12465;&#12540;&#12472;&#12398;arrange&#12467;&#12510;&#12531;&#12489;&#12391;&#26119;&#38918;&#12395;&#20006;&#12403;&#26367;&#12360;
#&#25991;&#23383;&#21015;ID&#12434;type.convert&#12391;&#25968;&#20516;&#21270;
SprData <- arrange(SprData, type.convert(ID))
#&#21442;&#32771;:&#12371;&#12371;&#12414;&#12391;&#12434;%>%&#12391;&#20966;&#29702;
#SprData <- GatherData %>% add_rownames(var = "ID") %>%
#spread(key = "Label", value = "value") %% arrange(type.convert(ID))
#&#30906;&#35469;
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をコピーしました