ফাংশন eat
আমার প্যাকেজের safejoin যদি আপনি এটি data.frames একটি দ্বিতীয় ইনপুট হিসাবে এটা তাদের প্রথম ইনপুট যাও recursively যোগ দেবেন একটি তালিকা দিতে, এই ধরনের বৈশিষ্ট্য রয়েছে।
গৃহীত এবং গৃহীত উত্তরের ডেটা প্রসারিত:
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
যুক্তি।