eat
내 패키지 safejoin 의 기능 에는 그러한 기능이 있습니다 .data.frames 목록을 두 번째 입력으로 제공하면 첫 번째 입력에 재귀 적으로 결합됩니다.
허용 된 답변 데이터를 차용 및 확장 :
x <- data_frame(i = c("a","b","c"), j = 1:3)
y <- data_frame(i = c("b","c","d"), k = 4:6)
z <- data_frame(i = c("c","d","a"), l = 7:9)
z2 <- data_frame(i = c("a","b","c"), l = rep(100L,3),l2 = rep(100L,3)) # for later
# devtools::install_github("moodymudskipper/safejoin")
library(safejoin)
eat(x, list(y,z), .by = "i")
# # A tibble: 3 x 4
# i j k l
# <chr> <int> <int> <int>
# 1 a 1 NA 9
# 2 b 2 4 NA
# 3 c 3 5 7
모든 열을 사용할 필요는 없습니다. tidyselect 에서 select helper를 사용하여 선택할 수 있습니다 ( .x
모든 .x
열 에서 시작하여 유지됨).
eat(x, list(y,z), starts_with("l") ,.by = "i")
# # A tibble: 3 x 3
# i j l
# <chr> <int> <int>
# 1 a 1 9
# 2 b 2 NA
# 3 c 3 7
또는 특정 것을 제거하십시오.
eat(x, list(y,z), -starts_with("l") ,.by = "i")
# # A tibble: 3 x 3
# i j k
# <chr> <int> <int>
# 1 a 1 NA
# 2 b 2 4
# 3 c 3 5
목록의 이름이 지정되면 이름이 접두사로 사용됩니다.
eat(x, dplyr::lst(y,z), .by = "i")
# # A tibble: 3 x 4
# i j y_k z_l
# <chr> <int> <int> <int>
# 1 a 1 NA 9
# 2 b 2 4 NA
# 3 c 3 5 7
열이 충돌하면 .conflict
인수를 사용하여 예를 들어 첫 번째 / 두 번째 열을 가져 와서 추가, 통합 또는 중첩하여 해결할 수 있습니다.
먼저 유지 :
eat(x, list(y, z, z2), .by = "i", .conflict = ~.x)
# # A tibble: 3 x 4
# i j k l
# <chr> <int> <int> <int>
# 1 a 1 NA 9
# 2 b 2 4 NA
# 3 c 3 5 7
마지막으로 유지 :
eat(x, list(y, z, z2), .by = "i", .conflict = ~.y)
# # A tibble: 3 x 4
# i j k l
# <chr> <int> <int> <dbl>
# 1 a 1 NA 100
# 2 b 2 4 100
# 3 c 3 5 100
더하다:
eat(x, list(y, z, z2), .by = "i", .conflict = `+`)
# # A tibble: 3 x 4
# i j k l
# <chr> <int> <int> <dbl>
# 1 a 1 NA 109
# 2 b 2 4 NA
# 3 c 3 5 107
합병 :
eat(x, list(y, z, z2), .by = "i", .conflict = dplyr::coalesce)
# # A tibble: 3 x 4
# i j k l
# <chr> <int> <int> <dbl>
# 1 a 1 NA 9
# 2 b 2 4 100
# 3 c 3 5 7
둥지:
eat(x, list(y, z, z2), .by = "i", .conflict = ~tibble(first=.x, second=.y))
# # A tibble: 3 x 4
# i j k l$first $second
# <chr> <int> <int> <int> <int>
# 1 a 1 NA 9 100
# 2 b 2 4 NA 100
# 3 c 3 5 7 100
NA
.fill
인수 를 사용하여 값을 대체 할 수 있습니다 .
eat(x, list(y, z), .by = "i", .fill = 0)
# # A tibble: 3 x 4
# i j k l
# <chr> <int> <dbl> <dbl>
# 1 a 1 0 9
# 2 b 2 4 0
# 3 c 3 5 7
기본적으로는 향상된 것 left_join
하지만 모든 dplyr이 관통 지원 조인 .mode
인수, 퍼지도를 통해 지원됩니다 조인 match_fun
인수 (이 패키지 주위에 싸여 fuzzyjoin
) 또는 같은 수식을주고 ~ X("var1") > Y("var2") & X("var3") < Y("var4")
받는
by
인수입니다.