Rでのデータの結合に関して

このエントリーをはてなブックマークに追加


データ分析をする際に、基本的なことではあるんだけども「2つのデータを結合」したいことがある。

 

たとえば2つのデータA,Bがあり、それを結合させたいケースを考える。

一般にA,B,の列または行が全て等しい数だったりすればcombineすればいいだけだが、実際にデータを整備するときには

「Aには含まれるけどBには含まれないデータ」や

「 Bには含まれるけどもAには含まれない列ベクトル」

などが存在するだろう。特に個票データで、データにとって取得できた個人にばらつきがある場合などには頭を悩ます人も多いと思う

 

そういう場合に,Rではmerge関数を使えば簡単に結合することができる。

たとえばRのスクリプトでA,Bを以下の手順でデータ生成してみる

A = matrix(0,10,3)
B = matrix(0,10,4)
A[,1]=1:10
B[,1]=1:10
A[,2]=rnorm(10,4,7)
B[,2]=c(0,0,0,1,0,0,0,1,1,1)
A[,3]=rnorm(10,10,50)
B[,3]=c(1,0,0,1,1,1,1,0,0,0)
B[,4]=c(9,4,6,1,8,3,6,9,2,2)

colnames(A)=c("id","x","y")
colnames(B)=c("id","dummy1","dummy2","category")

するとこのようなデータができると思う

f:id:taithon:20151219161855p:plain

 

 

さて、このときA,Bには共通してidがあるので、これを基準に二つのデータを結合させたい。そこで

merge(A,B,by="id",ALL=TRUE)

 

とすると以下のようになる

f:id:taithon:20151219161947p:plain

 

基準としたidに関しては一つの列になり、それ以外の部分に関しては付け加えてくれている。ここで簡単なmerge関数の説明だが

  • merge(x,y,by="z",ALL= )形式が基本
  • x,yが結合したい二つのデータ
  • zはどの変数を基準に結合するか指定するところ
  • ALLはTRUEをとれば二つの結合の和集合に、FALSEでは共通部分になる(デフォルトではFALSEになっていることに注意)

という点だけで扱えるかと思う。

 

 

 

この関数は、基準となるidで含まれてないものがそれぞれある場合でも同様に使える。

また、3つのデータを一気に結合することはできないのでA,B,Cのデータを結合したいときは、まずAとBをDというデータとして結合したのちにDとCと結合すればいい。