列や行方向,列名行名で結合するコマンドにはrbindやcbind,mergeがありますが、共通・非共通・全てを結合する場合には列名行名やデータサイズが異なる場合には工夫が必要です。
そんな工夫も必要なく、上記作業を手軽に実施できるパッケージの紹介です。Rの初心者だけでなく、玄人にもオススメです。
本パッケージの対象データはmatrixまたはarrayそしてvectorですが、data.frameの場合は一度「as.matrix」コマンドで変換後に操作することで操作が可能かと思います。
パッケージバージョンは2.9.6。実行コマンドはR version 4.2.2で確認しています。
パッケージのインストール
下記、コマンドを実行してください。
#パッケージのインストール
install.packages("devtools")
devtools::install_github("NumbersInternational/flipTables")
実行コマンド
詳細はコメント、パッケージのヘルプを確認してください。
[code language="R"]
#パッケージの読み込み
library("flipTables")
###データ例の作成#####
#Data1の作成
Data1 <- matrix(1:16, nrow = 4, ncol = 4)
#行列名の付与
dimnames(Data1) <- list(c("あ", "い", "う", "え"), c("a", "b", "c", "d"))
#確認
Data1
a b c d
あ 1 5 9 13
い 2 6 10 14
う 3 7 11 15
え 4 8 12 16
#Data2の作成
Data2 <- matrix(17:31, nrow = 5, ncol = 3)
#行列名の付与
dimnames(Data2) <- list(c("い", "か", "う", "き", "く"), c("b", "e", "c"))
#確認
Data2
b e c
い 17 22 27
か 18 23 28
う 19 24 29
き 20 25 30
く 21 26 31
########
#結合コマンド:MergeTablesコマンド
#列名で判断:joinbyオプション;"Join rows"(行名の判断;"Join columns")
#条件:nonmatchingオプション;共通"Matching only"
MergeTables(Data1, Data2, joinby = "Join rows", nonmatching = "Matching only")
b c
あ 5 9
い.x 6 10
う.x 7 11
え 8 12
い.y 17 27
か 18 28
う.y 19 29
き 20 30
く 21 31
#条件:nonmatchingオプション;1番目のデータを優先"Keep all from first table"
MergeTables(Data1, Data2, joinby = "Join rows", nonmatching = "Keep all from first table")
a b c d
あ 1 5 9 13
い.x 2 6 10 14
う.x 3 7 11 15
え 4 8 12 16
い.y NA 17 27 NA
か NA 18 28 NA
う.y NA 19 29 NA
き NA 20 30 NA
く NA 21 31 NA
#条件:nonmatchingオプション;2番目のデータを優先"Keep all from second table"
MergeTables(Data1, Data2, joinby = "Join rows", nonmatching = "Keep all from second table")
b c e
あ 5 9 NA
い.x 6 10 NA
う.x 7 11 NA
え 8 12 NA
い.y 17 27 22
か 18 28 23
う.y 19 29 24
き 20 30 25
く 21 31 26
#条件:nonmatchingオプション;全てを結合"Keep all"
MergeTables(Data1, Data2, joinby = "Join rows", nonmatching = "Keep all")
a b c d e
あ 1 5 9 13 NA
い.x 2 6 10 14 NA
う.x 3 7 11 15 NA
え 4 8 12 16 NA
い.y NA 17 27 NA 22
か NA 18 28 NA 23
う.y NA 19 29 NA 24
き NA 20 30 NA 25
く NA 21 31 NA 26
[/code]
少しでも、あなたの解析が楽になりますように!!