eat
मेरे पैकेज का कार्य सुरक्षित है में ऐसी सुविधा है, यदि आप इसे दूसरे इनपुट के रूप में डेटा.फ्रेम की सूची देते हैं, तो यह उन्हें पहले इनपुट में पुन: सम्मिलित करेगा।
स्वीकृत उत्तर के डेटा को उधार लेना और बढ़ाना:
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
हमें सभी कॉलम लेने की आवश्यकता नहीं है, हम चुनिंदा सहायकों को ट्रिब्लेक्ट से चुन सकते हैं और चुन सकते हैं (जैसा कि हम .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
तर्क।