Rで解析:データのハンドリング作業を効率化!「gdata」パッケージの紹介

Rの解析に役に立つ記事
スポンサーリンク

解析の重要な作業としてデータのハンドリングがあります。本パッケージではデータの結合、文字列、因子、NA値の操作が手軽にできます。これらの操作はRの基本コマンドでも可能ですが、初心者には面倒なこともあります。まずは、本パッケージでデータのハンドリングをしつつ、基本コマンドを学習してみてはいかがでしょうか。

パッケージから日常的に使用頻度が高そうな19のコマンドを紹介します。
本パッケージの各コマンドhelpにはSee Alsoに基本コマンドが紹介されています。ぜひ、活用ください。

パッケージバージョンは2.18.0.1。windows11のR version 4.2.2で確認しています。

スポンサーリンク

パッケージのインストール

下記コマンドを実行してください。

#パッケージのインストール
install.packages("gdata")

実行コマンド

19のコマンドを紹介します。詳細はコメントまたはパッケージヘルプを確認してください。

#ライブラリの読み込み
library("gdata")

#####準備#####################
#データ例の作成
set.seed(1234)
i <- 10
TestData1 <- data.frame(Group = paste0("Test", 1:i),
                           Data1 = I(sample(c(1:3, NA), i, replace = TRUE)),
                           Text1 = I(sample(c(LETTERS[1:3], NA), i, replace = TRUE)))
TestData2 <- data.frame(Group = paste0("Test", 11:(10 + i)),
                           Data2 = I(sample(c(1:3, NA), i, replace = TRUE)),
                           Text2 = I(sample(c(LETTERS[1:3], NA), i, replace = TRUE)))
##############################

##1
#R&#12391;&#26368;&#24460;&#12395;&#23455;&#34892;&#12375;&#12383;&#32080;&#26524;&#12434;&#34920;&#31034;:ans&#12467;&#12510;&#12531;&#12489;
ans()

##2
#&#12467;&#12510;&#12531;&#12489;&#12398;&#12487;&#12501;&#12457;&#12523;&#12488;&#20516;&#12434;&#34920;&#31034;:Arg&#12467;&#12510;&#12531;&#12489;
Args("data.frame")

##3
#2&#12388;&#12398;data.frame&#12434;&#22522;&#28310;&#34892;&#12391;&#32080;&#21512;:bindData&#12467;&#12510;&#12531;&#12489;
#common&#12458;&#12503;&#12471;&#12519;&#12531;&#12391;&#25351;&#23450;&#12375;&#12383;&#34892;&#20197;&#22806;&#12398;&#34892;&#12434;&#27178;&#12395;&#32080;&#21512;
bindData(TestData1, TestData2, common = c("Group"))
    Group Data1 Text1 Data2 Text2
1   Test1    NA  <NA>    NA  <NA>
2   Test2    NA  <NA>    NA  <NA>
3   Test3     2     B    NA  <NA>
#####&#30465;&#30053;#####
17 Test17    NA  <NA>     1     A
18 Test18    NA  <NA>    NA     B
19 Test19    NA  <NA>    NA     B
20 Test20    NA  <NA>    NA     C

##4
#&#25968;&#21015;&#12395;&#12521;&#12505;&#12523;&#12434;&#20184;&#19982;&#12375;&#12390;&#22240;&#23376;&#21270;:case&#12467;&#12510;&#12531;&#12489;
#&#25351;&#23450;&#12375;&#12383;&#20516;&#20197;&#22806;&#12399;NA&#12395;&#12394;&#12426;&#12414;&#12377;
TestData1[, 2]
[1] NA NA  2  2  1 NA  3  1  1  2
case(TestData1[, 2], "a" = 1, "b" = 2)
[1] <NA> <NA> b    b    a    <NA> <NA> a    a    b   
Levels: a b

##5
#data.frame&#12420;matirix&#12398;&#12487;&#12540;&#12479;&#20869;&#23481;&#12434;&#32173;&#25345;&#12375;&#12390;&#32080;&#21512;:cbindX
#cbindX&#12467;&#12510;&#12531;&#12489;:&#12487;&#12540;&#12479;&#20869;&#23481;&#12364;&#32173;&#25345;&#12373;&#12428;&#32080;&#21512;&#12391;&#12365;&#12414;&#12377;
cbindX(TestData1[1:5, 1:2], TestData2)
   Group Data1  Group Data2 Text2
1  Test1    NA Test11     2     C
2  Test2    NA Test12     2  <NA>
#####&#30465;&#30053;#####
9   <NA>    NA Test19    NA     B
10  <NA>    NA Test20    NA     C

##6
#&#12467;&#12531;&#12477;&#12540;&#12523;&#12398;&#20013;&#22830;&#12395;&#12486;&#12461;&#12473;&#12488;&#12434;&#34920;&#31034;:centerText&#12467;&#12510;&#12531;&#12489;
centerText("&#12363;&#12425;&#12384;&#12395;&#12356;&#12356;&#12418;&#12398;")

##7
#&#12487;&#12540;&#12479;&#12398;&#32080;&#21512;&#20803;&#21517;&#12364;&#12431;&#12363;&#12427;&#12424;&#12358;&#12395;&#32080;&#21512;:combine&#12467;&#12510;&#12531;&#12489;
#name&#12458;&#12503;&#12471;&#12519;&#12531;:source&#21517;&#12434;&#25351;&#23450;,&#21021;&#26399;&#20516;;NULL
combine(TestData1[, 2], TestData2[, 2], names = c("TEST1", "TEST2"))
&#12288;&#12288;data source
1    NA  TEST1
2    NA  TEST1
#####&#30465;&#30053;#####
19   NA  TEST2
20   NA  TEST2

##8
#&#20351;&#29992;&#12373;&#12428;&#12390;&#12356;&#12394;&#12356;&#22240;&#23376;level&#12434;&#21066;&#38500;:drop.levels&#12467;&#12510;&#12531;&#12489;
#&#20803;&#12398;&#12487;&#12540;&#12479;
factor(TestData1[3:6, 1],
       levels = c("Test3", "Test4", "Test5",
                  "Test6", "Test8"))
[1] Test3 Test4 Test5 Test6
Levels: Test3 Test4 Test5 Test6 Test8
#&#12467;&#12510;&#12531;&#12489;&#12434;&#36969;&#24540;
drop.levels(factor(TestData1[3:6, 1],
                   levels = c("Test3", "Test4", "Test5",
                              "Test6", "Test8")))
[1] Test3 Test4 Test5 Test6
Levels: Test3 Test4 Test5 Test6

##9
#&#22240;&#23376;&#12398;&#12521;&#12505;&#12523;&#12392;&#38918;&#30058;&#12434;&#30906;&#35469;:mapLevels&#12467;&#12510;&#12531;&#12489;
mapLevels(TestData1[3:6, 1])
Test3 Test4 Test5 Test6 
1     2     3     4 

##10
#&#37325;&#35079;&#12487;&#12540;&#12479;&#20301;&#32622;&#12398;&#30906;&#35469;:duplicated2&#12467;&#12510;&#12531;&#12489;
#&#20803;&#12487;&#12540;&#12479;
TestData1[, 3]
[1] NA  NA  "B" "C" "B" "B" "B" "C" "B" NA 
#R&#20184;&#23646;(base)&#12398;duplicated&#12467;&#12510;&#12531;&#12489;
#2&#22238;&#30446;&#20986;&#29694;&#12364;TRUE
duplicated(TestData1[, 3])
[1] FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
#duplicated2&#12467;&#12510;&#12531;&#12489;
#&#37325;&#35079;&#12487;&#12540;&#12479;&#12399;&#20840;&#12390;TRUE
duplicated2(TestData1[, 3])
[1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE

##11
#&#12487;&#12540;&#12479;&#12398;&#26368;&#21021;,&#26368;&#24460;&#12434;&#34920;&#31034;:first,last&#12467;&#12510;&#12531;&#12489;
#&#26368;&#21021;&#12434;&#34920;&#31034;:first&#12467;&#12510;&#12531;&#12489;
first(TestData1)
  Group Data1 Text1
#1 Test1    NA  <NA>
#&#26368;&#24460;&#12434;&#34920;&#31034;:last&#12467;&#12510;&#12531;&#12489;
last(TestData1)
   Group Data1 Text1
#10 Test10     2  <NA>

##12
#&#12487;&#12540;&#12479;&#12501;&#12524;&#12540;&#12512;&#12398;&#34892;&#12434;&#25351;&#23450;&#12375;&#12390;&#20966;&#29702;&#12434;&#23455;&#34892;:frameApply&#12467;&#12510;&#12531;&#12489;
#by&#12458;&#12503;&#12471;&#12519;&#12531;:&#23550;&#35937;&#34892;&#12434;&#25351;&#23450;
frameApply(TestData1, by = c("Group", "Data1"))
    Group Data1 Count
1   Test1    NA     1
10 Test10     2     1
#####&#30465;&#30053;#####
8   Test8     1     1
9   Test9     1     1

##13
#&#12487;&#12540;&#12479;&#12434;1&#21015;&#12372;&#12392;&#12395;&#32080;&#21512;:interleave&#12467;&#12510;&#12531;&#12489;
#interleave&#12467;&#12510;&#12531;&#12489;
interleave(matrix(TestData1[, 1], 2), matrix(TestData1[, 2], 2),
           matrix(TestData1[, 3], 2))
     [,1]    [,2]    [,3]    [,4]    [,5]    
[1,] "Test1" "Test3" "Test5" "Test7" "Test9" 
[2,] NA      "2"     "1"     "3"     "1"     
[3,] NA      "B"     "B"     "B"     "B"     
[4,] "Test2" "Test4" "Test6" "Test8" "Test10"
[5,] NA      "2"     NA      "1"     "2"     
[6,] NA      "C"     "B"     "C"     NA

##14
#&#12510;&#12488;&#12522;&#12483;&#12463;&#12473;,&#12487;&#12540;&#12479;&#12501;&#12524;&#12540;&#12512;&#12398;&#34920;&#31034;&#34892;&#12434;&#25351;&#23450;:left(&#24038;&#20596;),right(&#21491;&#20596;)&#12467;&#12510;&#12531;&#12489;
#&#20849;&#36890;n&#12458;&#12503;&#12471;&#12519;&#12531;:&#24038;&#12414;&#12383;&#12399;&#21491;&#31471;&#12363;&#12425;&#34920;&#31034;&#12377;&#12427;&#34892;&#25968;&#12434;&#25351;&#23450;
#&#24038;&#12363;&#12425;&#25351;&#23450;:left&#12467;&#12510;&#12531;&#12489;
left(cbind(TestData1, TestData1), n = 4)
    Group Data1 Text1 Group.1
1   Test1    NA  <NA>   Test1
2   Test2    NA  <NA>   Test2
#####&#30465;&#30053;#####
9   Test9     1     B   Test9
10 Test10     2  <NA>  Test10

##15
#NA&#12434;&#38500;&#12356;&#12383;&#12505;&#12463;&#12488;&#12523;&#12398;&#38263;&#12373;&#12434;&#34920;&#31034;:nods&#12467;&#12510;&#12531;&#12489;
#&#20803;&#12487;&#12540;&#12479;
Tnode <- c(NA, 2, 2, 1, NA)
#R&#20184;&#23646;(base)&#12398;length&#12467;&#12510;&#12531;&#12489;
length(Tnode)
[1] 5
#node&#12467;&#12510;&#12531;&#12489;
nobs(Tnode)
[1] 3

##16
#&#25351;&#23450;&#12375;&#12383;&#20869;&#23481;&#12398;&#20301;&#32622;&#12434;&#21462;&#24471;:isUnknown&#12467;&#12510;&#12531;&#12489;
#&#20301;&#32622;&#12399;TRUE&#12391;&#36820;&#12373;&#12428;&#12414;&#12377;
#&#20803;&#12487;&#12540;&#12479;
TestData1[, 2]
[1] NA NA  2  2  1 NA  3  1  1  2
#NA&#12398;&#20301;&#32622;&#12434;&#30906;&#35469;
isUnknown(TestData1[, 2], unknown = NA)
[1]  TRUE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE

##17
#&#25351;&#23450;&#12375;&#12383;&#20869;&#23481;&#12434;NA&#12395;&#32622;&#25563;:unknownToNA&#12467;&#12510;&#12531;&#12489;
#&#20803;&#12487;&#12540;&#12479;
TestData1[, 2]
[1] NA NA  2  2  1 NA  3  1  1  2
#1&#12434;NA&#12395;&#32622;&#25563;,unknown&#12458;&#12503;&#12471;&#12519;&#12531;&#12391;&#20516;&#12434;&#25351;&#23450;
unknownToNA(TestData1[, 2], unknown = 1)
[1] NA NA  2  2 NA NA  3 NA NA  2

##18
#NA&#12434;&#38500;&#12356;&#12383;&#32068;&#12415;&#21512;&#12431;&#12379;&#25968;&#12434;&#34920;&#31034;:nPairs&#12467;&#12510;&#12531;&#12489;
#&#20803;&#12487;&#12540;&#12479;
    Group Data1 Text1
1   Test1    NA  <NA>
2   Test2    NA  <NA>
3   Test3     2     B
4   Test4     2     C
5   Test5     1     B
6   Test6    NA     B
7   Test7     3     B
8   Test8     1     C
9   Test9     1     B
10 Test10     2  <NA>
  
#nPairs&#12467;&#12510;&#12531;&#12489;&#12434;&#23455;&#34892;
#all&#12399;&#34892;&#27598;&#12398;NA&#12434;&#38500;&#12356;&#12383;&#12487;&#12540;&#12479;&#25968;
nPairs(x = TestData1, margin = TRUE)
     Grop Dat1 Txt1 all
Grop   10    7    7  10
Dat1    7    7    6   7
Txt1    7    6    7   6
attr(,"class")
[1] "nPairs" "matrix" "array" 

##19
#&#19977;&#35282;&#34892;&#21015;&#19978;&#37096;&#12414;&#12383;&#12399;&#19979;&#37096;&#12487;&#12540;&#12479;&#25805;&#20316;:upperTriangle,lowerTriangle&#12467;&#12510;&#12531;&#12489;
#nPairs&#12467;&#12510;&#12531;&#12489;&#12392;&#12398;&#32068;&#12415;&#21512;&#12431;&#12379;
#&#19978;&#37096;&#12487;&#12540;&#12479;&#12434;&#21462;&#24471;
upperTriangle(nPairs(x = TestData1))
[1] 7 7 6
#&#19978;&#37096;&#12487;&#12540;&#12479;&#12434;&#22793;&#26356;,"<-"&#12391;&#20516;&#12434;&#22793;&#26356;
x <- nPairs(x = TestData1)
upperTriangle(x) <- c(9, 10, 11)
#&#34920;&#31034;
x
     Grop Dat1 Txt1
Grop   10    9   10
Dat1    7    7   11
Txt1    7    6    7
attr(,"class")
[1] "nPairs" "matrix" "array" 

#&#19979;&#37096;&#12487;&#12540;&#12479;&#12434;&#21462;&#24471;
#lowerTriangle(nPairs(x = TestData1))

少しでも、あなたの解析が楽になりますように!!

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