এটি ডেটা সম্পর্কিত দার্শনিক প্রশ্নটির একটি অংশ join আমি ডেটা টেবিলগুলির জন্য আরও এবং বেশি ব্যবহার সন্ধান করছি, তবে এখনও শিখছি ...
X[Y]
ডেটা টেবিলগুলির জন্য যোগদানের ফর্ম্যাটটি খুব সংক্ষিপ্ত, সহজ এবং দক্ষ, তবে যতদূর আমি বলতে পারি এটি কেবল অভ্যন্তরীণ যোগদান এবং ডান বাহ্যিক যোগদানগুলিকে সমর্থন করে। বাম বা পুরো বাহ্যিক যোগদানের জন্য, আমাকে ব্যবহার করতে হবে merge
:
X[Y, nomatch = NA]
- Y এর সমস্ত সারি - ডান বাহিরের জোড় (ডিফল্ট)X[Y, nomatch = 0]
- এক্স এবং ওয়াই উভয় ক্ষেত্রেই কেবল সারি - অভ্যন্তরীণ যোগদানmerge(X, Y, all = TRUE)
- এক্স এবং ওয়াই উভয় থেকে সমস্ত সারি - সম্পূর্ণ বাহ্যিক যোগদানmerge(X, Y, all.x = TRUE)
- এক্স এর সমস্ত সারি - বাম বাহিরের জোড়
আমার কাছে মনে হচ্ছে যে X[Y]
জয়েন ফর্ম্যাটটি 4 প্রকারের সমস্ত প্রকারের সাথে যোগদান করলে এটি কার্যকর হবে। কেবলমাত্র দুই প্রকারের যোগদানের কোনও কারণ রয়েছে?
আমার জন্য, nomatch = 0
এবং nomatch = NA
পরামিতি মানগুলি ক্রিয়া সম্পাদনের জন্য খুব স্বজ্ঞাত নয়। এটা আমাকে বোঝার জন্য এবং মনে রাখবেন হয় merge
: সিনট্যাক্স all = TRUE
, all.x = TRUE
এবং all.y = TRUE
। X[Y]
অপারেশনটি যেহেতু এর merge
চেয়ে অনেক বেশি সাদৃশ্যযুক্ত match
, তাই ফাংশনটির প্যারামিটারের merge
পরিবর্তে সংশ্লেষটি কেন যোগদান করবে না ?match
nomatch
এখানে 4 টি যুক্ত হওয়ার কোডের উদাহরণ রয়েছে:
# sample X and Y data.tables
library(data.table)
X <- data.table(t = 1:4, a = (1:4)^2)
setkey(X, t)
X
# t a
# 1: 1 1
# 2: 2 4
# 3: 3 9
# 4: 4 16
Y <- data.table(t = 3:6, b = (3:6)^2)
setkey(Y, t)
Y
# t b
# 1: 3 9
# 2: 4 16
# 3: 5 25
# 4: 6 36
# all rows from Y - right outer join
X[Y] # default
# t a b
# 1: 3 9 9
# 2: 4 16 16
# 3: 5 NA 25
# 4: 6 NA 36
X[Y, nomatch = NA] # same as above
# t a b
# 1: 3 9 9
# 2: 4 16 16
# 3: 5 NA 25
# 4: 6 NA 36
merge(X, Y, by = "t", all.y = TRUE) # same as above
# t a b
# 1: 3 9 9
# 2: 4 16 16
# 3: 5 NA 25
# 4: 6 NA 36
identical(X[Y], merge(X, Y, by = "t", all.y = TRUE))
# [1] TRUE
# only rows in both X and Y - inner join
X[Y, nomatch = 0]
# t a b
# 1: 3 9 9
# 2: 4 16 16
merge(X, Y, by = "t") # same as above
# t a b
# 1: 3 9 9
# 2: 4 16 16
merge(X, Y, by = "t", all = FALSE) # same as above
# t a b
# 1: 3 9 9
# 2: 4 16 16
identical( X[Y, nomatch = 0], merge(X, Y, by = "t", all = FALSE) )
# [1] TRUE
# all rows from X - left outer join
merge(X, Y, by = "t", all.x = TRUE)
# t a b
# 1: 1 1 NA
# 2: 2 4 NA
# 3: 3 9 9
# 4: 4 16 16
# all rows from both X and Y - full outer join
merge(X, Y, by = "t", all = TRUE)
# t a b
# 1: 1 1 NA
# 2: 2 4 NA
# 3: 3 9 9
# 4: 4 16 16
# 5: 5 NA 25
# 6: 6 NA 36
আপডেট: ডেটা.ট্যাবল v1.9.6 on=
সিনট্যাক্সটি প্রবর্তন করেছে , যা প্রাথমিক কী বাদে অন্য ক্ষেত্রগুলিতে অ্যাডহাকের সাথে যোগ দেয়। জাঙ্গোরেকির প্রশ্নের উত্তর কীভাবে (ফ্রেম) ডাটা ফ্রেমে (অভ্যন্তরীণ, বাহ্যিক, বাম, ডান) যোগদান করবেন? ডেটা.টিটেবল পরিচালনা করতে পারে এমন অতিরিক্ত জোড়ার ধরণের কয়েকটি উদাহরণ সরবরাহ করে।
unique()
সম্পূর্ণ যোগদানের জন্য নীচে আপনার পদ্ধতির পক্ষে অগ্রাধিকারযোগ্য rbind(Y[X],X[Y])
, যেহেতু rbind টেবিলটি অনুলিপি করতে জড়িত। এটা কি সঠিক?
unique(c(unique(X[,t]), unique(Y[,t]))
- এটি আরও মেমরির দক্ষ হওয়া উচিত কারণ এটি কেবলমাত্র দুটি তালিকার সংমিশ্রণ যা এক্স এবং ওয়াইয়ের সারিগুলির সংখ্যার চেয়ে কম বা সমান হতে চলেছে) ।
Y[X]
যদি আপনি চান বাম বাইরের যোগদানের এরX[Y]
এবংrbind(Y[X],X[Y])
যদি আপনি একটি সম্পূর্ণ বাইরের চান যোগদানের