2017-12-27 13 views
0

2つのデータセットをマージする必要がありますが、2番目のデータセットではidが重複する可能性があります。 IDが重複している場合は、その最初の行にどのようにマージするのですか?より明確にすることが2つのデータセットをRの最初の行だけでマージする

は、ここでの再現性の例です:

df1 
structure(list(id = 1:2, y = 10:11), .Names = c("id", "y"), class = "data.frame", row.names = c(NA, 
-2L)) 

df2 
structure(list(id = c(1L, 1L, 1L, 2L), x1 = 435:438, x2 = c(435L, 
436L, 436L, 438L), x3 = c(435L, 436L, 436L, 438L)), .Names = c("id", 
"x1", "x2", "x3"), class = "data.frame", row.names = c(NA, -4L 
)) 

Eaxample:出力では私はこのフォーマットは

id y x1 x2 x3 
1 10 435 435 435 
2 11 438 438 438 

すなわち期待します2行と3行(1 id)はマージに参加しません。

答えて

1

data.tableを使用するとできます。 2番目のデータセットからid == 1の最初のオカレンスのみを保持し、次に両方のデータセットをmergeの両方で保持できます。ここで

ソリューションです:

library(data.table) 
setDT(df2) 
df2[, idx := 1:.N, by = id] 
df2 <- df2[idx == 1, ] 
df2[, idx := NULL] 
output <- merge(df1, df2, by = "id") 
output 

それはあなたの希望する出力あげる:

id y x1 x2 x3 
1 1 10 435 435 435 
2 2 11 438 438 438 
関連する問題