আমি dtplyr দিয়ে কী করতে পারি না যা আমি ডেটা টেবিলটিতে পারি


9

আমি, আর এ wrangling বিশেষভাবে মধ্যে ডেটা জন্য আমার শেখার প্রচেষ্টা বিনিয়োগ করা উচিত dplyr, dtplyrএবং data.table?

  • আমি dplyrবেশিরভাগই ব্যবহার করি তবে যখন ডেটা খুব বড় হয় তখন এর জন্য আমি ব্যবহার করব data.tableযা একটি বিরল ঘটনা। সুতরাং এখন যে dtplyrভি 1.0 ইন্টারফেস হিসাবে আউট data.table, পৃষ্ঠতল এটি মনে হয় আমি আর data.tableকখনও ইন্টারফেস ব্যবহার সম্পর্কে চিন্তা করার প্রয়োজন হবে না ।

  • তাই কি অধিকাংশ দরকারী বৈশিষ্ট্য বা দিক আছে data.tableযে করতে পারবে না ব্যবহার করা যেতে dtplyrমুহূর্তে, এবং যে সম্ভবত সঙ্গে কখনোই সম্পন্ন করা হবে dtplyr?

  • এর মুখে, dplyrএর সুবিধাগুলি সহ এটি data.tableএটিকে ছাপিয়ে যাবার মতো dtplyrশোনায় dplyr। সম্পূর্ণরূপে পরিপক্ক হওয়ার পরে ব্যবহার dplyrকরার কি কোনও কারণ থাকবে dtplyr?

দ্রষ্টব্য: আমি dplyrবনাম সম্পর্কে জিজ্ঞাসা করছি না data.table(যেমন ডেটা.ট্যাবল বনাম ডিপি্লায়ার: অন্য কেউ ভাল কিছু করতে পারে বা অন্যটি খারাপ করতে পারে না? ) তবে নির্দিষ্ট সমস্যার জন্য একে অপরের চেয়ে বেশি পছন্দ করা হলে কেন ' টি dtplyrব্যবহারের সরঞ্জাম হোন।


1
আপনি ভাল করতে পারেন এমন কিছু আছে যা আপনি ভাল dplyrকরতে পারবেন না data.table? যদি তা না হয় data.tableতবে স্যুইচিংয়ের চেয়ে ভাল হতে চলেছে dtplyr
সিন্ড্রি_বলদুর

2
dtplyrরিডমি থেকে , 'কিছু data.tableঅভিব্যক্তির সরাসরি dplyrসমতুল্য থাকে না। উদাহরণস্বরূপ, ক্রস- বা রোলিং-এর সাথে যোগ দেওয়ার কোনও উপায় নেই dplyr'' এবং ' dplyrশব্দার্থবিজ্ঞানের সাথে মেলে , mutate() ডিফল্টভাবে জায়গায় সংশোধন করে না। এর অর্থ হ'ল জড়িত বেশিরভাগ এক্সপ্রেশনগুলির mutate()একটি অনুলিপি অবশ্যই তৈরি করতে হবে যা আপনি data.tableসরাসরি ব্যবহার করে থাকলে প্রয়োজনীয় হবে না '' দ্বিতীয় অংশটির চারপাশে একটি উপায় রয়েছে তবে কত ঘন ঘন mutateব্যবহৃত হয় তা বিবেচনা করে , এটি আমার দৃষ্টিতে বেশ বড় ডাউনসাইড।
ক্ল্যানসিস্ট্যাটস

উত্তর:


15

আমি আমার সেরা গাইড দেওয়ার চেষ্টা করব তবে এটি সহজ নয় কারণ একজনকে সমস্ত {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এবং যথাক্রমে update11 ডলার এবং 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। এবং অনুবাদকৃত কোডটি আরও কার্যকর একটি (ডেটা.ট্যাবল ব্যবহারকারীরা যে লিখতে পারে) সেগুলিও অন্য একটি বিষয় (যেমন কোডটি অনুবাদ করা হয়, তবে এটি কী কার্যকরী সংস্করণ?)। অনেক কিছুই পরস্পরের সাথে সংযুক্ত থাকে।

এই দিকগুলির অনেকগুলি উপরে বর্ণিত পয়েন্টগুলির সাথে আন্তঃসম্পর্কিত

  • অপারেশন জটিলতা

  • আপডেটের-বাই-রেফারেন্স

আপনি আবিষ্কার করতে পারেন যে 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 রয়েছে তবে এটি বর্তমানে নিষ্ক্রিয়।

আমি আশা করি এটি সকলকে সহায়তা করে। আপনার দিনটি শুভ হোক ☺☺


2

নন-ইকুই যোগ দেয় এবং রোলিংয়ের মনে আসে। Dplyr তে সমতুল্য ফাংশন অন্তর্ভুক্ত করার মতো কোনও পরিকল্পনা নেই বলে মনে হচ্ছে যাতে dtplyr এর অনুবাদ করার মতো কিছুই নেই।

এছাড়াও পুনর্নির্মাণ রয়েছে (পুনরায় আকার 2 এ একই ফাংশনের সমতুল্য অনুকূলিত কাস্টক এবং গলানো) যা ডিপিপ্লায়ারেও নেই।

সমস্ত * _if এবং * _at ফাংশন বর্তমানে dtplyr এর সাথে অনুবাদ করা যায় না তবে সেগুলি চলছে।


0

যোগদানের জন্য একটি কলাম আপডেট করুন কিছু .এসডি কৌশলগুলি অনেকগুলি চ ক্রিয়াকলাপ এবং elseশ্বর আরও কী জানেন কারণ # তাত্পর্যযোগ্য কেবল একটি সাধারণ লাইব্রেরির চেয়ে বেশি এবং কয়েকটি ফাংশন দিয়ে এটি সংক্ষিপ্ত করা যায় না

এটি নিজস্বভাবে একটি সম্পূর্ণ বাস্তুতন্ত্র

যেদিন আমি আর শুরু করেছি সেদিন থেকে আমার কখনই ডিপি্লাইয়ারের প্রয়োজন হয়নি কারণ ডেটা.ট্যাবেল এত জঘন্য কাজ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.