ฟังก์ชั่นeat
ของแพคเกจsafejoinของฉันมีคุณสมบัติเช่นนี้ถ้าคุณให้รายการของข้อมูลเป็นเฟรมที่สองมันจะเข้าร่วมพวกเขาซ้ำกับอินพุตแรก
การยืมและขยายข้อมูลคำตอบที่ยอมรับได้:
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และเลือก (เมื่อเราเริ่มจากคอลัมน์.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
โต้แย้ง