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

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

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

解析の重要な作業としてデータのハンドリングがあります。本パッケージではデータの結合、文字列、因子、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で最後に実行した結果を表示: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    NA  <NA>    NA  <NA>
2   Test2    NA  <NA>    NA  <NA>
3   Test3     2     B    NA  <NA>
#####省略#####
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
#数列にラベルを付与して因子化:caseコマンド
#指定した値以外はNAになります
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やmatirixのデータ内容を維持して結合:cbindX
#cbindXコマンド:データ内容が維持され結合できます
cbindX(TestData1[1:5, 1:2], TestData2)
   Group Data1  Group Data2 Text2
1  Test1    NA Test11     2     C
2  Test2    NA Test12     2  <NA>
#####省略#####
9   <NA>    NA Test19    NA     B
10  <NA>    NA Test20    NA     C

##6
#コンソールの中央にテキストを表示:centerTextコマンド
centerText("からだにいいもの")

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

##8
#使用されていない因子levelを削除:drop.levelsコマンド
#元のデータ
factor(TestData1[3:6, 1],
       levels = c("Test3", "Test4", "Test5",
                  "Test6", "Test8"))
[1] Test3 Test4 Test5 Test6
Levels: Test3 Test4 Test5 Test6 Test8
#コマンドを適応
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
#因子のラベルと順番を確認:mapLevelsコマンド
mapLevels(TestData1[3:6, 1])
Test3 Test4 Test5 Test6 
1     2     3     4 

##10
#重複データ位置の確認:duplicated2コマンド
#元データ
TestData1[, 3]
[1] NA  NA  "B" "C" "B" "B" "B" "C" "B" NA 
#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)
  Group Data1 Text1
#1 Test1    NA  <NA>
#最後を表示:lastコマンド
last(TestData1)
   Group Data1 Text1
#10 Test10     2  <NA>

##12
#データフレームの行を指定して処理を実行:frameApplyコマンド
#byオプション:対象行を指定
frameApply(TestData1, by = c("Group", "Data1"))
    Group Data1 Count
1   Test1    NA     1
10 Test10     2     1
#####省略#####
8   Test8     1     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,] 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
#マトリックス,データフレームの表示行を指定:left(左側),right(右側)コマンド
#共通nオプション:左または右端から表示する行数を指定
#左から指定:leftコマンド
left(cbind(TestData1, TestData1), n = 4)
    Group Data1 Text1 Group.1
1   Test1    NA  <NA>   Test1
2   Test2    NA  <NA>   Test2
#####省略#####
9   Test9     1     B   Test9
10 Test10     2  <NA>  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] NA NA  2  2  1 NA  3  1  1  2
#NAの位置を確認
isUnknown(TestData1[, 2], unknown = NA)
[1]  TRUE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE

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

##18
#NAを除いた組み合わせ数を表示:nPairsコマンド
#元データ
    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コマンドを実行
#allは行毎のNAを除いたデータ数
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
#三角行列上部または下部データ操作:upperTriangle,lowerTriangleコマンド
#nPairsコマンドとの組み合わせ
#上部データを取得
upperTriangle(nPairs(x = TestData1))
[1] 7 7 6
#上部データを変更,"<-"で値を変更
x <- nPairs(x = TestData1)
upperTriangle(x) <- c(9, 10, 11)
#表示
x
     Grop Dat1 Txt1
Grop   10    9   10
Dat1    7    7   11
Txt1    7    6    7
attr(,"class")
[1] "nPairs" "matrix" "array" 

#下部データを取得
#lowerTriangle(nPairs(x = TestData1))

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

スポンサーリンク
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.