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


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

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

パッケージバージョンは2.17.0。R version 3.2.0でコマンドを確認しています。


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

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

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

実行コマンドの紹介

19のコマンドを紹介します。詳細はコメントまたはパッケージヘルプを確認してください。なお、データ例はコマンド実行のたびに内容が変わります。

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

#####準備#####################
#データ例の作成
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で最後に実行した結果を表示:ansコマンド
ans()

##2
#コマンドのデフォルト値を表示:Argコマンド
Args("data.frame")

##3
#2つのdata.frameを基準行で結合:bindDataコマンド
#commonオプションで指定した行以外の行を横に結合
bindData(TestData1, TestData2, common = c("Group"))
    Group Data1 Text1 Data2 Text2
1   Test1     3     B    NA  <NA>
2   Test2     3     B    NA  <NA>
3   Test3     2     A    NA  <NA>
#####省略#####
17 Test17    NA  <NA>     1     C
18 Test18    NA  <NA>     2     B
19 Test19    NA  <NA>    NA     A
20 Test20    NA  <NA>    NA  <NA>

##4
#数列にラベルを付与して因子化:caseコマンド
#指定した値以外はNAになります
TestData1[, 2]
[1]  3  3  2 NA  2 NA  2  2  1  1
case(TestData1[, 2], "a" = 1, "b" = 2)
[1] <NA> <NA> b <NA> b <NA> b b a a   
Levels: a b

##5
#data.frameやmatirixのデータ内容を維持して結合:cbindX
#cbindXコマンド:データ内容が維持され結合できます
cbindX(TestData1[1:5, 1:2], TestData2)
  Group Data1  Group Data2 Text2
1  Test1     3 Test11     2     C
2  Test2     3 Test12     2     C 
#####省略#####
9   <NA>    NA Test19    NA     A
10  <NA>    NA Test20    NA  <NA>

##6
#コンソールの中央になるよう結果を表示:centerTextコマンド
centerText(TestData1[, 3])

##7
#データの結合元名がわかるように結合:combineコマンド
#nameオプション:source名を指定,初期値;NULL
combine(TestData1[, 2], TestData2[, 2], names = c("TEST1", "TEST2"))
   data source
1     3  TEST1
2     3  TEST1
#####省略#####
19   NA  TEST2
20   NA  TEST2

##8
#使用されていない因子levelを削除:drop.levels
#元のデータ
TestData1[3:6, 1]
[1] Test3 Test4 Test5 Test6
Levels: Test1 Test10 Test2 Test3 Test4 Test5 Test6 Test7 Test8 Test9
#コマンドを適応
drop.levels(TestData1[3:6, 1])
[1] Test3 Test4 Test5 Test6
Levels: Test3 Test4 Test5 Test6

##9
#因子のラベルと順番を確認:mapLevelsコマンド
mapLevels(TestData1[3:6, 1])
Test1 Test10  Test2  Test3  Test4  Test5  Test6  Test7  Test8  Test9 
 1      2      3      4      5      6      7      8      9     10 

##10
#重複データ位置の確認:duplicated2コマンド
#元データ
TestData1[, 3]
[1] "B" "B" "A" "A" "A" NA  "C" NA  NA  "A"
#R付属(base)のduplicatedコマンド
#2回目出現がTRUE
duplicated(TestData1[, 3])
[1] FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
#duplicated2コマンド
#重複データは全てTRUE
duplicated2(TestData1[, 3])
[1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE

##11
#データの最初,最後を表示:first,lastコマンド
#最初を表示:firstコマンド
first(TestData1, n = 1)
  Group Data1 Text1
1 Test1     3     B
#最後を表示:lastコマンド
last(TestData1, n = 1)
   Group Data1 Text1
10 Test10     1     A

##12
#データフレームの行を指定して処理を実行:frameApplyコマンド
#byオプション:対象行を指定
frameApply(TestData1, by = c("Group", "Data1"))
    Group Data1 Count
1   Test1     3     1
10 Test10     1     1
#####省略#####
8   Test8     2     1
9   Test9     1     1

##13
#データを1列ごとに結合:interleaveコマンド
#interleaveコマンド
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,] "3"     "2"     "2"     "2"     "1"     
[3,] "B"     "A"     "A"     "C"     NA      
[4,] "Test2" "Test4" "Test6" "Test8" "Test10"
[5,] "3"     NA      NA      "2"     "1"     
[6,] "B"     "A"     NA      NA      "A"  

##14
#マトリックス,データフレームの表示行を指定:left(左側),right(右側)コマンド
#共通nオプション:左または右端から表示する行数を指定
#左から指定:leftコマンド
left(cbind(TestData1, TestData1), n = 4)
    Group Data1 Text1 Group.1
1   Test1     3     B   Test1
2   Test2     3     B   Test2
#####省略#####
9   Test9     1  <NA>   Test9
10 Test10     1     A  Test10

##15
#NAを除いたベクトルの長さを表示:nodsコマンド
#元データ
Tnode <- c(NA, 2, 2, 1, NA)
#R付属(base)のlengthコマンド
length(Tnode)
[1] 5
#nodeコマンド
nobs(Tnode)
[1] 3

##16
#指定した内容の位置を取得:isUnknownコマンド
#位置はTRUEで返されます
#元データ
TestData1[, 2]
[1]  3  3  2 NA  2 NA  2  2  1  1
#NAの位置を確認
isUnknown(TestData1[, 2], unknown = NA)
[1] FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE

##17
#指定した内容をNAに置換:unknownToNAコマンド
#元データ
TestData1[, 2]
[1]  3  3  2 NA  2 NA  2  2  1  1
#1をNAに置換,unknownオプションで値を指定
unknownToNA(TestData1[, 2], unknown = 1)
[1]  3  3  2 NA  2 NA  2  2 NA NA

##18
#NAを除いた組み合わせ数を表示:nPairsコマンド
#元データ
TestData1
  Group Data1 Text1
1   Test1    NA     A
2   Test2     2     A
3   Test3     2  <NA>
4   Test4     2  <NA>
5   Test5     1  <NA>
6   Test6     1     C
7   Test7    NA     A
8   Test8     2     B
9   Test9     1     C
10 Test10     1     A
#コマンドを実行
#allは行毎のNAを除いたデータ数
nPairs(x = TestData1, margin = TRUE)
   Grop Dat1 Txt1 all
Grop   10    8    7  10
Dat1    8    8    5   8
Txt1    7    5    7   5
attr(,"class")
[1] "nPairs" "matrix"

##19
#三角行列上部または下部データ操作:upperTriangle,lowerTriangleコマンド
#nPairsコマンドとの組み合わせ
#上部データを取得
upperTriangle(nPairs(x = TestData1))
[1] 8 7 5
#上部データを変更,"<-"で値を変更
x <- nPairs(x = TestData1)
upperTriangle(x) <- c(9, 10, 11)
     Grop Dat1 Txt1
Grop   10    9   10
Dat1    8    8   11
Txt1    7    5    7
attr(,"class")
[1] "nPairs" "matrix"
#下部データを取得
#lowerTriangle(nPairs(x = TestData1))

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

スポンサードリンク

おすすめコンテンツ


スポンサードリンク