重複値があり、最初の値を保持したいときにdplyrの結合関数を使用して問題が発生していたので、自分自身の関数を書くことにしました。既にこれを行う関数がある場合は、私に教えてください!おそらく、書かれて効果的です。ここでR重複結合関数
は、いくつかのサンプルデータとコードです:
dt1 <- data.table(A = c(rep(1, 3), rep(2, 3)), B = rep(1:3, 2),
C = runif(n = 6, min = 0, max = 10))
dt2 <- data.table(A = c(rep(3, 3), rep(4, 3)), B = rep(1:3, 2),
C = runif(n = 6, min = 0, max = 10))
dt3 <- data.table(A = c(rep(3, 3), rep(4, 3)), B = rep(1:3, 2),
D = runif(n = 6, min = 0, max = 10))
dt4 <- data.table(A = c(rep(2, 3), rep(3, 3)), B = rep(1:3, 2),
D = runif(n = 6, min = 0, max = 10))
dt5 <- duplicate_join(dt1, dt2)
dt6 <- duplicate_join(dt5, dt3)
dt7 <- duplicate_join(dt6, dt4)
duplicate_join <- function(dt1, dt2) {
melt1 <- dt1 %>%
gather(variable, value, -c(A, B), na.rm = TRUE)
melt2 <- dt2 %>%
gather(variable, value, -c(A, B), na.rm = TRUE)
join <- rbindlist(list(melt1, melt2), use.names = TRUE) %>%
distinct(A, B, variable, .keep_all = TRUE) %>%
spread(variable, value)
join
}
私の問題は、ユーザーが集まると重複する値をチェックする列を決定させて頂いております。この場合、A
とB
を一般的な式にする必要があります。私はFunctions、Capturing Un-evaluated Dotsを読んで、これを行う関数のソースコードを見てみましたが(ggplot
)、何の意味もありません。私は多くのテクニックを試して、エラーobject 'A' not found
またはinvalid argument to unary operator
を取得しました。
関数呼び出しがあるかどうか私には関係ありません:
duplicate_join <- function(dt1, dt2, ...) {}
または:
duplicate_join <- function(dt1, dt2, cols) {}
私はちょうど関数内で動作するように...
またはcols
を取得する方法を知っておく必要があります!ありがとう!
Dplyrパッケージから説明を探している
あなたの助け、Cayodaのためにありがとうございました!残念ながら、 'semi_join'は動作しません。これは、あなたの例が示すように、複数のカラムの場合には機能しないからです。最初のケースでは、実際には機能しません。列 'A'の値が変更されたためです。 –