আমি আমার সেরা গাইড দেওয়ার চেষ্টা করব তবে এটি সহজ নয় কারণ একজনকে সমস্ত {data.table}, {dplyr}, t dtplyr} এবং {বেস আর of এর সাথে পরিচিত হওয়া প্রয়োজন} আমি {data.table} এবং অনেকগুলি {পরিপাটি বিশ্ব} প্যাকেজ (use dplyr except ব্যতীত) ব্যবহার করি। উভয়কেই ভালবাসি, যদিও আমি ডেপ্লাইয়ের থেকে ডেটা টেক্সট-এর বাক্য গঠন পছন্দ করি। আমি আশা করি সমস্ত পরিপাটি বিশ্ব প্যাকেজগুলি যখনই প্রয়োজন হবে তখন ব্যাকেন্ড হিসাবে {dtplyr} বা {data.table use ব্যবহার করবে।
অন্য যে কোনও অনুবাদ হিসাবে (ভাবেন ডিপ্লাইর টু স্পার্কলি / এসকিউএল), অন্তত আপাতত এমন কিছু জিনিস রয়েছে যা অনুবাদ বা অনুবাদ করা যায় না। আমার অর্থ, সম্ভবত একদিন t dtplyr it এটিকে 100% অনুবাদ করে তুলতে পারে, কে জানে। নীচের তালিকাটি সম্পূর্ণ নয় বা এটি 100% সঠিকও কারণ আমি সম্পর্কিত বিষয় / প্যাকেজ / ইস্যু / ইত্যাদি সম্পর্কিত আমার জ্ঞানের উপর ভিত্তি করে উত্তর দেওয়ার সর্বোচ্চ চেষ্টা করব।
গুরুত্বপূর্ণভাবে, সেই উত্তরগুলির জন্য যা সম্পূর্ণ নির্ভুল নয়, আমি আশা করি এটি আপনাকে {ডেটা.ট্যাবিল of এর কোন দিকগুলি সম্পর্কে মনোযোগ দেওয়া উচিত এবং এটি {dtplyr to এর সাথে তুলনা করে এবং নিজেই উত্তরগুলি সন্ধান করতে পারে সে সম্পর্কে আপনাকে কিছু গাইড সরবরাহ করে hope এই উত্তরগুলি সম্মানের জন্য গ্রহণ করবেন না।
এবং, আমি আশা করি এই পোস্টটি সমস্ত {dplyr}, {data.table} বা {dtplyr} ব্যবহারকারী / স্রষ্টাদের আলোচনার জন্য এবং সহযোগিতার জন্য হিসাবে ব্যবহার করা যেতে পারে এবং # আর স্ট্যাটসকে আরও উন্নত করতে পারে।
{data.table কেবল দ্রুত এবং মেমরির দক্ষ অপারেশনের জন্যই ব্যবহৃত হয় না। আমার সহ আরও অনেক লোক {data.table} এর মার্জিত সিনট্যাক্স পছন্দ করে} frollapply
এটিতে সি-র লিখিত রোলিং-ফ্যামিলি (যেমন ) -র মতো টাইম-সিরিজ ফাংশনগুলির মতো অন্যান্য দ্রুত ক্রিয়াকলাপগুলিও অন্তর্ভুক্ত থাকে এটি পরিপাটি সহ যে কোনও ফাংশন সহ ব্যবহার করা যেতে পারে। আমি {data.table use + {purrr use অনেক ব্যবহার করি!
অপারেশন জটিলতা
এটি সহজেই অনুবাদ করা যায়
library(data.table)
library(dplyr)
library(flights)
data <- data.table(diamonds)
# dplyr
diamonds %>%
filter(cut != "Fair") %>%
group_by(cut) %>%
summarize(
avg_price = mean(price),
median_price = as.numeric(median(price)),
count = n()
) %>%
arrange(desc(count))
# data.table
data [
][cut != 'Fair', by = cut, .(
avg_price = mean(price),
median_price = as.numeric(median(price)),
count = .N
)
][order( - count)]
{ডেটা.টিবেল} খুব দ্রুত এবং মেমরির দক্ষ কারণ (প্রায়?) সবকিছু আপডেট থেকে বাই রেফারেন্স , কী (এসকিউএল ভাবেন) এবং প্যাকেজের সমস্ত জায়গাতেই তাদের নিরলস অপ্টিমাইজেশনের মূল ধারণাগুলি সহ সি থেকে শুরু করে তৈরি করা হয়েছে everything (অর্থাত্ fifelse
, fread/fread
বেস আর দ্বারা গৃহীত রেডিক্স সাজানোর ক্রম), সিনট্যাক্সটি সংক্ষিপ্ত এবং সামঞ্জস্যপূর্ণ নিশ্চিত করার সময়, তাই আমি এটিকে মার্জিত বলে মনে করি।
থেকে ভূমিকা data.table করতে , যেমন প্রধান তথ্য ম্যানিপুলেশন অপারেশন উপসেট, গ্রুপ, আপডেট করে যোগদানের, ইত্যাদি জন্য একসাথে রাখা হয়
সংক্ষিপ্ত এবং ধারাবাহিক বাক্য গঠন ...
প্রতিটি ক্রিয়াকলাপ মানচিত্রের জ্ঞানীয় বোঝা ছাড়াই বিশ্লেষণ তরল করে সম্পাদন করা ...
অভ্যন্তরীণভাবে এবং খুব কার্যকরভাবে অপারেশনগুলিকে প্রতিটি অপারেশনের জন্য প্রয়োজনীয় ডেটা সঠিকভাবে জেনে এবং খুব দ্রুত এবং মেমরি দক্ষ কোডের দিকে পরিচালিত করে স্বয়ংক্রিয়ভাবে অপ্টিমাইজ করা
শেষ পয়েন্ট, উদাহরণ হিসাবে,
# Calculate the average arrival and departure delay for all flights with “JFK” as the origin airport in the month of June.
flights[origin == 'JFK' & month == 6L,
.(m_arr = mean(arr_delay), m_dep = mean(dep_delay))]
আমরা প্রথম মিলটি সারি সূচকগুলি খুঁজে পাই যেখানে মূল বিমানবন্দর "জেএফকে" সমান হয় এবং মাসের সমান 6 এল থাকে। আমরা এখনও পুরো ডেটা সাবসেট করি না those সেই সারিগুলির সাথে মিল রেখে টেবিল।
এখন, আমরা j এর দিকে চেয়ে দেখি যে এটিতে কেবল দুটি কলাম ব্যবহার করা হয়েছে। এবং আমাদের যা করতে হবে তা হল তাদের গড় () গণনা করা। সুতরাং আমরা মিলে যাওয়া সারিগুলির সাথে সম্পর্কিত কেবল সেইগুলি কলামগুলি সাবসেট করেছি এবং তাদের গড় () গণনা করি।
যেহেতু ক্যোয়ারির তিনটি প্রধান উপাদান (i, j এবং বাই) এক সাথে রয়েছে [...] , ডেটা.ট্যাবলগুলি তিনটি দেখতে পারে এবং মূল্যায়ন করার আগে কোয়েরিটিকে পুরোপুরি অনুকূলিত করতে পারে, প্রতিটি পৃথকভাবে নয় । গতি এবং মেমরির উভয় দক্ষতার জন্য আমরা তাই পুরো উপসেটটি এড়াতে সক্ষম হয়েছি (যেমন, arr_delay এবং dep_delay এর পাশাপাশি কলামগুলি সাবসেট করা)।
এটি প্রদত্ত, {data.table of এর সুবিধার জন্য, ap dtplr of এর অনুবাদটি সেই ক্ষেত্রে সঠিক হতে হবে। অপারেশনগুলি যত জটিল, তত কঠিন অনুবাদ। উপরের মতো সাধারণ ক্রিয়াকলাপগুলির জন্য এটি অবশ্যই সহজেই অনুবাদ করা যায়। জটিল বা or dtplyr by দ্বারা সমর্থিত নয় তাদের জন্য আপনাকে উপরে বর্ণিত হিসাবে নিজেকে খুঁজে বের করতে হবে, একজনকে অনুবাদিত বাক্য গঠন এবং বেঞ্চমার্কের তুলনা করতে হবে এবং পরিচিত প্যাকেজগুলি থাকতে হবে।
জটিল ক্রিয়াকলাপ বা অসমর্থিত অপারেশনগুলির জন্য, আমি নীচে কয়েকটি উদাহরণ সরবরাহ করতে সক্ষম হতে পারি। আবার, আমি সর্বাধিক চেষ্টা করছি আমার উপর নম্র থাকুন।
আপডেট-বাই-রেফারেন্স
আমি পরিচয় / বিশদটিতে যাব না তবে এখানে কয়েকটি লিঙ্ক রয়েছে
প্রধান সংস্থান: রেফারেন্স শব্দার্থবিদ্যা
আরো বিস্তারিত: বুঝুন ঠিক যখন একটি data.table একটি রেফারেন্স অন্য data.table (একটি কপি বনাম) হল
আপডেট-রেফারেন্স , আমার মতে, {data.table of এর সর্বাধিক গুরুত্বপূর্ণ বৈশিষ্ট্য এবং এটি এটিকে এত দ্রুত এবং মেমরির দক্ষ করে তোলে। dplyr::mutate
এটি ডিফল্টরূপে সমর্থন করে না। যেহেতু আমি {dtplyr with এর সাথে পরিচিত নই, আমি নিশ্চিত নই যে and dtplyr by দ্বারা কতগুলি এবং কী অপারেশনগুলি সমর্থন করতে পারে বা না} উপরে উল্লিখিত হিসাবে, এটি অপারেশনগুলির জটিলতার উপরও নির্ভর করে, যার ফলে অনুবাদগুলি প্রভাবিত হয়।
আপডেট-বাই-রেফারেন্স ব্যবহারের দুটি উপায় রয়েছে{Data.table} এ
{data.table of এর অ্যাসাইনমেন্ট অপারেটর :=
set
-family: set
, setnames
, setcolorder
, setkey
, setDT
, fsetdiff
এবং আরও অনেক কিছু
:=
তুলনায় হিসাবে সাধারণত ব্যবহৃত হয় set
। জটিল এবং বড় ডেটাসেটের জন্য, আপডেট-বাই-রেফারেন্স শীর্ষ গতি এবং মেমরির দক্ষতা পাওয়ার জন্য কী। ভাবার সহজ উপায় (100% নির্ভুল নয়, বিশদ এর চেয়ে আরও জটিল কারণ এতে কঠোর / অগভীর অনুলিপি এবং আরও অনেকগুলি কারণ জড়িত), বলুন আপনি 10 কলাম এবং 1 জিবি সহ প্রতিটি 10 জিবি-র বৃহত ডেটাসেট নিয়ে কাজ করছেন । একটি কলাম কলা চালানোর জন্য, আপনাকে কেবল 1 জিবি দিয়ে ডিল করতে হবে।
মূল বিষয়টি হ'ল আপডেট-বাই-রেফারেন্স সহ আপনার কেবলমাত্র প্রয়োজনীয় ডেটা নিয়ে কাজ করতে হবে। এজন্য {data.table using ব্যবহার করার সময়, বিশেষত বড় ডেটাসেট নিয়ে কাজ করার সময় আমরা যখনই সম্ভব আপডেট-রেফারেন্স ব্যবহার করি । উদাহরণস্বরূপ, বড় মডেলিং ডেটাসেটের হেরফের
# Manipulating list columns
df <- purrr::map_dfr(1:1e5, ~ iris)
dt <- data.table(df)
# data.table
dt [,
by = Species, .(data = .( .SD )) ][, # `.(` shorthand for `list`
model := map(data, ~ lm(Sepal.Length ~ Sepal.Width, data = . )) ][,
summary := map(model, summary) ][,
plot := map(data, ~ ggplot( . , aes(Sepal.Length, Sepal.Width)) +
geom_point())]
# dplyr
df %>%
group_by(Species) %>%
nest() %>%
mutate(
model = map(data, ~ lm(Sepal.Length ~ Sepal.Width, data = . )),
summary = map(model, summary),
plot = map(data, ~ ggplot( . , aes(Sepal.Length, Sepal.Width)) +
geom_point())
)
গৃহপালিত অপারেশনগুলি list(.SD)
id dtlyr by দ্বারা সমর্থন করা যাবে না যেমন পরিপাটি ব্যবহারকারীরা ব্যবহার করেন tidyr::nest
? সুতরাং আমি নিশ্চিত না যে পরবর্তী ক্রিয়াকলাপগুলিকে {ডেটা.ট্যাবলেট'র উপায়টি দ্রুত এবং কম স্মৃতিশক্তি হিসাবে অনুবাদ করা যায় কিনা।
দ্রষ্টব্য: ডেটা. টেবিলের ফলাফল "মিলিসেকেন্ড" এ, dplyr "মিনিটে"
df <- purrr::map_dfr(1:1e5, ~ iris)
dt <- copy(data.table(df))
bench::mark(
check = FALSE,
dt[, by = Species, .(data = list(.SD))],
df %>% group_by(Species) %>% nest()
)
# # A tibble: 2 x 13
# expression min median `itr/sec` mem_alloc `gc/sec` n_itr n_gc
# <bch:expr> <bch:tm> <bch:tm> <dbl> <bch:byt> <dbl> <int> <dbl>
# 1 dt[, by = Species, .(data = list(.SD))] 361.94ms 402.04ms 2.49 705.8MB 1.24 2 1
# 2 df %>% group_by(Species) %>% nest() 6.85m 6.85m 0.00243 1.4GB 2.28 1 937
# # ... with 5 more variables: total_time <bch:tm>, result <list>, memory <list>, time <list>,
# # gc <list>
আপডেট-বাই-রেফারেন্সের অনেকগুলি ব্যবহারের কেস রয়েছে এবং এমনকি {ডেটা.ট্যাবলেট} ব্যবহারকারীরা এর বেশি সংখ্যক কোডের প্রয়োজন হওয়ায় সর্বদা এটির উন্নত সংস্করণ ব্যবহার করবেন না। {Dtplyr এই বাক্সটির বাইরে সমর্থন করে কিনা, আপনাকে নিজেরাই খুঁজে বের করতে হবে।
একই ফাংশনগুলির জন্য একাধিক আপডেট বাই রেফারেন্স
প্রধান সংস্থান: ডেটাতে মার্জিতভাবে একাধিক কলামগুলি বরাদ্দ করা হচ্ছে la
এটি হয় সাধারণত ব্যবহৃত হয় :=
বা জড়িত set
।
dt <- data.table( matrix(runif(10000), nrow = 100) )
# A few variants
for (col in paste0('V', 20:100))
set(dt, j = col, value = sqrt(get(col)))
for (col in paste0('V', 20:100))
dt[, (col) := sqrt(get(col))]
# I prefer `purrr::map` to `for`
library(purrr)
map(paste0('V', 20:100), ~ dt[, (.) := sqrt(get(.))])
{Data.table} ম্যাট ডাউলের নির্মাতা হিসাবে
(নোট করুন বৃহত্তর সংখ্যক কলামের চেয়ে বেশি সংখ্যক সারিতে লুপ সেট করা আরও সাধারণ হতে পারে))
+ সেটকি + আপডেট-বাই-রেফারেন্সে যোগ দিন
আমার তুলনামূলকভাবে বড় ডেটা এবং অনুরূপ যোগদানের ধরণগুলির সাথে দ্রুত যোগদানের দরকার ছিল, তাই আমি সাধারণ যোগদানের পরিবর্তে আপডেট-বাই-রেফারেন্সের শক্তি ব্যবহার করি । তারা আরো কোডের প্রয়োজন, তাদেরকে আমি পুনর্ব্যাবহার্যোগ্যতা এবং পাঠযোগ্যতা যেখানে আমি একে ডাকতে জন্য অ-মানক মূল্যায়ন সাথে ব্যক্তিগত প্যাকেজের মধ্যে মোড়ানো setjoin
।
আমি এখানে কিছু বেঞ্চমার্ক করেছি: ডেটা টেবিল যোগ + আপডেট-বাই-রেফারেন্স + সেটকি
সারসংক্ষেপ
# For brevity, only the codes for join-operation are shown here. Please refer to the link for details
# Normal_join
x <- y[x, on = 'a']
# update_by_reference
x_2[y_2, on = 'a', c := c]
# setkey_n_update
setkey(x_3, a) [ setkey(y_3, a), on = 'a', c := c ]
উল্লেখ্য: dplyr::left_join
এছাড়াও পরীক্ষা করা হয় এবং এটা ~ সঙ্গে ধীরতম 9,000 MS এর, উভয় {data.table} চেয়ে বেশি মেমরি ব্যবহার এর update_by_reference
এবং setkey_n_update
, তবে {data.table} কম মেমরি ব্যবহার এর normal_join। এটি প্রায় ~ ২.০ গিগাবাইট মেমরি গ্রাস করেছে। আমি কেবলমাত্র {data.table on এ ফোকাস করতে চাই বলে আমি এটিকে অন্তর্ভুক্ত করি নি}
মূল অনুসন্ধান
setkey + update
এবং যথাক্রমে update
11 ডলার এবং 6.5 ডলার দ্রুত normal join
হয়
- প্রথম যোগদানের ক্ষেত্রে, এর পারফরম্যান্স ওভারহেডের
setkey + update
সমান update
যেমন setkey
তার নিজস্ব কর্মক্ষমতা লাভগুলি অফসেট করে
- দ্বিতীয় এবং পরবর্তী যোগদান উপর, যেমন
setkey
প্রয়োজন নেই, setkey + update
দ্রুত চেয়ে update
(অপেক্ষাকৃত দ্রুত বা চেয়ে ~ 1.8 গুণ normal join
~ 11 বার করে)
উদাহরণ
পারফরম্যান্ট এবং মেমরির দক্ষ যোগদানের জন্য, যে কোনওটি ব্যবহার করুন update
বা setkey + update
যেখানে আরও বেশি কোডের ব্যয়ে দ্রুততর হয়।
ব্রুভিটির জন্য কয়েকটি সিউডো কোড দেখুন see লজিক একই।
এক বা কয়েকটি কলামের জন্য
a <- data.table(x = ..., y = ..., z = ..., ...)
b <- data.table(x = ..., y = ..., z = ..., ...)
# `update`
a[b, on = .(x), y := y]
a[b, on = .(x), `:=` (y = y, z = z, ...)]
# `setkey + update`
setkey(a, x) [ setkey(b, x), on = .(x), y := y ]
setkey(a, x) [ setkey(b, x), on = .(x), `:=` (y = y, z = z, ...) ]
অনেক কলামের জন্য
cols <- c('x', 'y', ...)
# `update`
a[b, on = .(x), (cols) := mget( paste0('i.', cols) )]
# `setkey + update`
setkey(a, x) [ setkey(b, x), on = .(x), (cols) := mget( paste0('i.', cols) ) ]
দ্রুত এবং স্মৃতিশক্তির দক্ষতার জন্য মোড়ক সংযুক্ত হয় ... তাদের মধ্যে অনেকগুলি ... অনুরূপ জোড়-প্যাটার্ন সহ, তাদের setjoin
উপরের মতো - মোড়ক সহ update
- ছাড়া জড়ানsetkey
setjoin(a, b, on = ...) # join all columns
setjoin(a, b, on = ..., select = c('columns_to_be_included', ...))
setjoin(a, b, on = ..., drop = c('columns_to_be_excluded', ...))
# With that, you can even use it with `magrittr` pipe
a %>%
setjoin(...) %>%
setjoin(...)
সহ setkey
, যুক্তি on
বাদ দেওয়া যেতে পারে। এটি পাঠযোগ্যতার জন্যও বিশেষত অন্যদের সাথে সহযোগিতার জন্য অন্তর্ভুক্ত করা যেতে পারে।
বৃহত্তর সারি-অপারেশন
- উপরে উল্লিখিত হিসাবে, ব্যবহার করুন
set
- আপনার টেবিলটি প্রাক-জনবসতি করুন, আপডেট-বাই-রেফারেন্স কৌশলগুলি ব্যবহার করুন
- কী ব্যবহার করে সাবসেট (যেমন
setkey
)
সম্পর্কিত সংস্থান: ডেটা.ট্যাবল অবজেক্টের শেষে রেফারেন্স সহ একটি সারি যুক্ত করুন
আপডেট-বাই-রেফারেন্সের সংক্ষিপ্তসার
এগুলি আপডেট-বাই-রেফারেন্সের কয়েকটি ব্যবহারের কেস । আরও অনেক আছে।
আপনি দেখতে পাচ্ছেন যে বড় ডেটার সাথে লেনদেনের উন্নত ব্যবহারের জন্য, বড় ডেটাসেটের জন্য আপডেট-বাই-রেফারেন্স ব্যবহার করে অনেকগুলি ব্যবহারের কেস এবং কৌশল রয়েছে । এটি {data.table in এ ব্যবহার করা এত সহজ নয় এবং {dtplyr it এটি সমর্থন করে কিনা, আপনি নিজেরাই এটি খুঁজে পেতে পারেন।
আমি এই পোস্টে আপডেট-বাই-রেফারেন্সকে ফোকাস করছি কারণ আমি মনে করি এটি দ্রুত এবং মেমরির দক্ষ অপারেশনের জন্য {ডেটা.ট্যাবিল। এর সবচেয়ে শক্তিশালী বৈশিষ্ট্য। এটি বলেছিল, এমন অনেকগুলি, আরও অনেক দিক রয়েছে যা এটিকে এতো দক্ষ করে তোলে এবং আমি মনে করি যে স্থানীয়ভাবে t dtplyr supported দ্বারা সমর্থিত নয়}
অন্যান্য মূল বিষয়
কী / সমর্থিত নয়, এটি অপারেশনগুলির জটিলতার উপরও নির্ভর করে এবং এতে ডেটা.ট্যাবলের স্থানীয় বৈশিষ্ট্য আপডেট-বাই-রেফারেন্সের অন্তর্ভুক্ত কিনা বা setkey
। এবং অনুবাদকৃত কোডটি আরও কার্যকর একটি (ডেটা.ট্যাবল ব্যবহারকারীরা যে লিখতে পারে) সেগুলিও অন্য একটি বিষয় (যেমন কোডটি অনুবাদ করা হয়, তবে এটি কী কার্যকরী সংস্করণ?)। অনেক কিছুই পরস্পরের সাথে সংযুক্ত থাকে।
setkey
। দেখুন কী এবং দ্রুত বাইনারি অনুসন্ধান ভিত্তিক উপসেট
- মাধ্যমিক সূচক এবং অটো সূচক
- ডেটা বিশ্লেষণের জন্য .SD ব্যবহার করা
- সময় সিরিজের ফাংশন: মনে করুন
frollapply
। ঘূর্ণায়মান ফাংশন, রোলিং সমষ্টি, স্লাইডিং উইন্ডো, চলমান গড়
- ঘূর্ণায়মান যোগদান , নন-ইকুই যোগ , (কিছু) "ক্রস" যোগ দিন
- {ডেটা.ট্যাবিল speed গতি এবং মেমরির দক্ষতায় ভিত্তি তৈরি করেছে, ভবিষ্যতে এটি অনেকগুলি ক্রিয়াকলাপ অন্তর্ভুক্ত করতে পারে (যেমন তারা উপরে উল্লিখিত সময়-সিরিজের ফাংশনগুলি কীভাবে প্রয়োগ করে)
- সাধারণভাবে, data.table এর উপর আরো জটিল অপারেশন
i
, j
বা by
অপারেশন (যদি আপনি সেখানে প্রায় কোনো এক্সপ্রেশন ব্যবহার করতে পারেন), আমি মনে করি কঠিন অনুবাদের, বিশেষত যখন এটি সঙ্গে মেশা আপডেট-বাই-রেফারেন্স , setkey
এবং অন্যান্য দেশীয় data.table মত ফাংশনfrollapply
- আর একটি বিষয় বেস আর ব্যবহার করা সম্পর্কিত বা tidyvers সম্পর্কিত। আমি উভয় ডেটা.ট্যাবল + পরিপাটি ব্যবহার করি (dplyr / Reader / tidyr বাদে)। বড় অপারেশনের জন্য, আমি প্রায়শই বেঞ্চমার্ক করি, উদাহরণস্বরূপ,
stringr::str_*
পরিবার বনাম বেস আর ফাংশন এবং আমি খুঁজে পাই বেস আর একটি নির্দিষ্ট পরিমাণে দ্রুত এবং সেগুলি ব্যবহার করে। পয়েন্টটি হ'ল, নিজেকে কেবল পরিপাটি বা ডেটা.টিটেবল বা ... এ রাখবেন না, কাজটি পেতে অন্যান্য বিকল্পগুলি অন্বেষণ করুন।
এই দিকগুলির অনেকগুলি উপরে বর্ণিত পয়েন্টগুলির সাথে আন্তঃসম্পর্কিত
অপারেশন জটিলতা
আপডেটের-বাই-রেফারেন্স
আপনি আবিষ্কার করতে পারেন যে operations dtplyr these এই ক্রিয়াকলাপগুলিকে সমর্থন করে বিশেষত যখন তারা সম্মিলিত হয়।
ইন্টারেক্টিভ অধিবেশন চলাকালীন, ছোট বা বড় ডেটাসেটের সাথে ডিল করার সময় আর একটি দরকারী কৌশল {ডেটা.ট্যাবিল programming সত্যই প্রোগ্রামিং এবং গণনার সময়কে হ্রাস করার প্রতিশ্রুতি অবলম্বন করে ।
গতি এবং 'সুপারচার্জড রোউনাম' (ভেরিয়েবলের নাম উল্লেখ না করে সাবসেট) উভয়ের জন্য পুনরাবৃত্তভাবে ব্যবহৃত চলকগুলির জন্য কী নির্ধারণ করা।
dt <- data.table(iris)
setkey(dt, Species)
dt['setosa', do_something(...), ...]
dt['virginica', do_another(...), ...]
dt['setosa', more(...), ...]
# `by` argument can also be omitted, particularly useful during interactive session
# this ultimately becomes what I call 'naked' syntax, just type what you want to do, without any placeholders.
# It's simply elegant
dt['setosa', do_something(...), Species, ...]
যদি আপনার অপারেশনগুলিতে প্রথম উদাহরণের মতো কেবল সাধারণগুলিই জড়িত থাকে তবে {dtplyr the কাজটি সম্পন্ন করতে পারে। জটিল / অসমর্থিত ব্যক্তিদের জন্য, আপনি এই গাইডটি {dtplyr} এর অনুবাদকৃতদের সাথে তুলনা করতে ব্যবহার করতে পারেন যাতে seasonতুযুক্ত ডেটা. টেবিল ব্যবহারকারীরা কীভাবে ডেটা.ট্যাবলের মার্জিত সিনট্যাক্স সহ দ্রুত এবং মেমরির দক্ষ উপায়ে কোড করবে। অনুবাদ বলতে বোঝায় না যে এটি সবচেয়ে কার্যকর উপায় কারণ বড় ডেটার বিভিন্ন ক্ষেত্রে মোকাবেলা করার জন্য বিভিন্ন কৌশল থাকতে পারে। এমনকি বৃহত্তর ডেটাসেটের জন্য, এর সেরাটি পেতে আপনি {data.table {কে {ডিস্ক.ফ্রেম} , {fst} এবং {ড্রেক} এবং অন্যান্য দুর্দান্ত প্যাকেজগুলির সাথে একত্রিত করতে পারেন । একটি {big.data.table is রয়েছে তবে এটি বর্তমানে নিষ্ক্রিয়।
আমি আশা করি এটি সকলকে সহায়তা করে। আপনার দিনটি শুভ হোক ☺☺
dplyr
করতে পারবেন নাdata.table
? যদি তা না হয়data.table
তবে স্যুইচিংয়ের চেয়ে ভাল হতে চলেছেdtplyr
।