2017-04-22 2 views
2

私は以下のような2つのデータフレームを持っています。R Merge - 左結合ですが、すべての変数を表示します

DF_1 <- data.frame(ID_1 = c("A","1","2","3","B","1","2","3","C","1","2","3")) 
DF_2 <- data.frame(ID_2 = c("A","B","C")) 

次のような別のデータフレームを作成する必要があります。

ID_1 ID_2 
1  A A 
2  1 <NA> 
3  2 <NA> 
4  3 <NA> 
5  B B 
6  1 <NA> 
7  2 <NA> 
8  3 <NA> 
9  C C 
10 1 <NA> 
11 2 <NA> 
12 3 <NA> 

私は現在、この結果を得るためにこれを使用しています。しかし、私は可能な限りSQLから離れていたいと思います。

library(sqldf) 
RESULT <- sqldf('select aa.ID_1, bb.ID_2 
       from DF_1 aa left join DF_2 bb 
       on aa.ID_1 = bb.ID_2') 

また、マージを使用してみました。

RESULT <- merge(DF_1, DF_2, by.x = "ID_1", by.y = "ID_2", all.x = TRUE) 

しかし、私はこれが不足しているID_2を取得しています。

 ID_1 
1  1 
2  1 
3  1 
4  2 
5  2 
6  2 
7  3 
8  3 
9  3 
10 A 
11 B 
12 C 
+1

てみ 'DF_1 $ ID_2 <-ifelse(%DF_2 $ ID_2、as.character(DF_1 $ ID_1)、NAでDF_1 $ ID_1%)'を行うことができます。あなたは実際にマージをしていません。むしろ、第2のデータフレームに値が表示されている場合は最初の列と同じで、別の場合はNAと同じ別の列が必要です。 – nicola

答えて

0

我々はDF_2は1列のみなので、上のマージを行うに列を持っているので、これがあるmatch

DF_1$ID_2 <- DF_2$ID_2[match(DF_1$ID_1, DF_2$ID_2)] 
DF_1 
# ID_1 ID_2 
#1  A A 
#2  1 <NA> 
#3  2 <NA> 
#4  3 <NA> 
#5  B B 
#6  1 <NA> 
#7  2 <NA> 
#8  3 <NA> 
#9  C C 
#10 1 <NA> 
#11 2 <NA> 
#12 3 <NA> 
2

を使用することができます。あなたはこの

merge(DF_1, cbind(DF_2, DF_2$ID_2), by.x = "ID_1", by.y = "ID_2", all.x = TRUE) 

    # ID_1 DF_2$ID_2 
# 1  1  <NA> 
# 2  1  <NA> 
# 3  1  <NA> 
# 4  2  <NA> 
# 5  2  <NA> 
# 6  2  <NA> 
# 7  3  <NA> 
# 8  3  <NA> 
# 9  3  <NA> 
# 10 A   A 
# 11 B   B 
# 12 C   C 
関連する問題