আরএসে ডেটা-টেবিলের জন্য .SD কী বোঝায়


172

.SDদরকারী মনে হচ্ছে তবে আমি এটি দিয়ে কী করছি তা সত্যি জানি না। এটা কি জন্য দাঁড়াবেন? পূর্ববর্তী সময়কাল কেন (সম্পূর্ণ স্টপ)। আমি এটি ব্যবহার করার পরে কি ঘটছে?

আমি পড়েছি: গ্রুপ কলাম (গুলি) বাদ দিয়ে প্রতিটি গ্রুপের ডেটার উপসেট রয়েছে .SDis দলবদ্ধ করার সময় এটি ব্যবহার করা যেতে পারেdata.tablexi সময় by, কী দ্বারা byকীডিং এবং _একটি_এইচ_কেby

তার মানে কি কন্যা data.table পরবর্তী অপারেশনের জন্য স্মরণে রাখা হয়েছে?


30
?data.tableএই প্রশ্নের জন্য ধন্যবাদ, v1.7.10 এ উন্নত হয়েছিল। এটি এখন .SDস্বীকৃত উত্তর অনুসারে নামটি ব্যাখ্যা করে ।
ম্যাট ডাউলে

উত্তর:


205

.SD" Sata.table এর Dubset" এর মতো কিছু বোঝায় । প্রাথমিকটির কোনও তাত্পর্য "."নেই, এটি ছাড়াও এটি আরও সম্ভাব্য করে তোলে যে কোনও ব্যবহারকারী-সংজ্ঞায়িত কলাম নামের সাথে সংঘর্ষ হবে।

এটি যদি আপনার ডেটা হয় তবে টেবিল:

DT = data.table(x=rep(c("a","b","c"),each=2), y=c(1,3), v=1:6)
setkey(DT, y)
DT
#    x y v
# 1: a 1 1
# 2: b 1 3
# 3: c 1 5
# 4: a 3 2
# 5: b 3 4
# 6: c 3 6

এটি করলে সাহায্য করতে পারে আপনি দেখতে কি .SDহল:

DT[ , .SD[ , paste(x, v, sep="", collapse="_")], by=y]
#    y       V1
# 1: 1 a1_b3_c5
# 2: 3 a2_b4_c6

মূলত, by=yবিবৃতিটি মূল ডেটা ভেঙে দেয়data.tables

DT[ , print(.SD), by=y]
# <1st sub-data.table, called '.SD' while it's being operated on>
#    x v
# 1: a 1
# 2: b 3
# 3: c 5
# <2nd sub-data.table, ALSO called '.SD' while it's being operated on>
#    x v
# 1: a 2
# 2: b 4
# 3: c 6
# <final output, since print() doesn't return anything>
# Empty data.table (0 rows) of 1 col: y

এবং ঘুরে ফিরে তাদের উপর কাজ করে।

এটি কোনও একটিতে চলাকালীন, data.tableডাক নাম / হ্যান্ডেল / চিহ্ন ব্যবহার করে এটি আপনাকে বর্তমান উপ-উল্লেখ করতে দেয় .SD। এটি খুব সহজ, আপনি যেমন কলামগুলিতে অ্যাক্সেস করতে এবং পরিচালনা করতে পারবেন ঠিক তেমনই আপনি কমান্ড লাইনে বসে একটি একক ডাটা নিয়ে কাজ করছেন যা টেবিল বলা হয় .SD... এখানে ব্যতীত, data.tableপ্রতিটি উপ- data.tableসংজ্ঞায়িত দ্বারা এই ক্রিয়াকলাপগুলি সম্পাদন করবে কীগুলির সংমিশ্রণগুলি, তাদের একসাথে "আটকানো" এবং এককভাবে ফলাফলগুলি ফিরিয়ে দেওয়া data.table!


12
হ্যাঁ অবশ্যই. দেখতে আরেকটি উপায় .SDহল DT[,print(.SD),by=y]
ম্যাট ডাউল

6
@ ম্যাথেজডওলে - আপনি এখানে থাকাকালীন আপনার জন্য একটি প্রশ্ন। করা DT[,print(.SD[,y]),by=y], ইঙ্গিত দেয় যে এর মান হিসাবে আমার কাছে অ্যাক্সেস আছে y, যদিও এটি এর অংশ নয় .SDyবাদ পড়ার মান কোথায় ? এটি কি খ / সি এর বর্তমান মূল্য হিসাবে উপলব্ধ by?
জোশ ওব্রায়েন

8
@ জোস নিস হ্যাঁ. .SD[,y]একটি নিয়মিত হয় data.tableতাই যেহেতু উপসেট yএকটি কলাম নয় .SDপরিবেশ, এটা বলা যা এই ক্ষেত্রে হয় দেখায় j(পরিবেশ DTক্যোয়ারী) যেখানে byভেরিয়েবল পাওয়া যায়। যদি সেখানে না পাওয়া যায় তবে এটি পিতামাতার এবং তার পিতামাতার এবং অন্যদিকে সাধারণ আর পথে দেখায়। (ঠিক আছে, উত্তরাধিকার সূত্রে প্রাপ্ত সুযোগগুলিও যোগ করুন, যা কোনও উদাহরণ নেই বলে এই উদাহরণগুলিতে ব্যবহৃত হচ্ছে না i)।
ম্যাট ডাউল

1
@ জোশ এফএকিউ ২.৮ এর আরও রয়েছে, উন্নতির প্রয়োজন হতে পারে (পরামর্শ স্বাগত)।
ম্যাট ডাউল

3
@Josh কারণ গ্রুপ ভেরিয়েবল খুব, ঞ পাওয়া যায়, এবং দৈর্ঘ্য 1. হয় by=list(x,y,z)অর্থ হবে x, yএবং zপাওয়া যায় j। জেনেরিক অ্যাক্সেসের জন্য তারা এগুলিও গুটিয়ে রাখে .BY। এফএকিউ ২.১০ এর কিছু ইতিহাস রয়েছে তবে এতে কিছু স্পষ্টতা যুক্ত হতে পারে ?data.table। দুর্দান্ত, ডকুমেন্ট সহায়তা খুব স্বাগত জানানো হবে। আরও ভাল আপনি যদি প্রকল্পে যোগ দিতে চান এবং সরাসরি পরিবর্তন করতে চান
ম্যাট ডাউল

97

সম্পাদনা:

এই উত্তরটি কতটা প্রশংসিত হয়েছে তা দেওয়া, আমি এখন এটি এখানে উপলব্ধ একটি প্যাকেজ ভিগনেটে রূপান্তর করেছি


এটি প্রায়শই কীভাবে আসে তা বিবেচনা করে, আমি মনে করি এই উপরের জোশ ওব্রায়েন প্রদত্ত সহায়ক উত্তরের চেয়েও কিছুটা বেশি এক্সপোজারী হিসাবে সতর্কতা দেয়।

সাধারণত জোশের দ্বারা উদ্ধৃত / নির্মিত ডি আটা সংক্ষিপ্তসার এস ইউবসেট ছাড়াও , আমি "সেলসাম" বা "স্ব-রেফারেন্স" এর পক্ষে দাঁড়াতে "এস" বিবেচনা করাও সহায়ক বলে মনে করি - এটি তার মূল মৌলিক আঙ্গিকায় রয়েছে আত্মবাচক রেফারেন্স থেকে নিজেই - হিসাবে আমরা নীচে উদাহরণ দেখতে পাবেন, এই একসঙ্গে chaining "প্রশ্নের" (extractions / সাব-সেট নির্বাচন / ব্যবহার ইত্যাদি জন্য বিশেষভাবে সহায়ক )। বিশেষত, এর অর্থ হ'ল এটি নিজেই একটি (যে সাবধানতার সাথে এটি নির্ধারণের অনুমতি দেয় না )।.SDdata.table[.SDdata.table:=

এর সহজ ব্যবহার .SDকলাম সাবসেটিংয়ের জন্য (যেমন, যখন .SDcolsনির্দিষ্ট করা হয়); আমি মনে করি এই সংস্করণটি বোঝার জন্য আরও সহজবোধ্য, তাই আমরা নীচে এটি প্রথমটি coverেকে দেব। .SDএর দ্বিতীয় ব্যবহারের ব্যাখ্যা , গ্রুপিং পরিস্থিতিগুলির অর্থ (যেমন, যখন by =বা keyby =নির্দিষ্ট করা হয়) কিছুটা আলাদা, ধারণামূলকভাবে (যদিও মূলত এটি একই রকম, কারণ সর্বোপরি, একটি নন-গোষ্ঠীভিত্তিক ক্রিয়াকলাপ ন্যায়বিচারের সাথে গ্রুপিংয়ের একটি প্রান্তের কেস একটি গ্রুপ)।


এখানে কিছু বর্ণনামূলক উদাহরণ এবং ব্যবহারের কিছু অন্যান্য উদাহরণ রয়েছে যা আমি নিজে প্রায়শই প্রয়োগ করি:

লাহমান ডেটা লোড হচ্ছে

ডেটা তৈরির পরিবর্তে এটিকে আরও বাস্তব-বিশ্বের অনুভূতি দেওয়ার জন্য আসুন এখান থেকে বেসবল সম্পর্কে কিছু ডেটা সেট লোড করুন Lahman:

library(data.table) 
library(magrittr) # some piping can be beautiful
library(Lahman)
Teams = as.data.table(Teams)
# *I'm selectively suppressing the printed output of tables here*
Teams
Pitching = as.data.table(Pitching)
# subset for conciseness
Pitching = Pitching[ , .(playerID, yearID, teamID, W, L, G, ERA)]
Pitching

নগ্ন .SD

এর প্রতিবিম্বিত প্রকৃতি সম্পর্কে আমি কী বোঝাতে চাইছি .SD, এর সর্বাধিক ব্যাল ব্যবহার বিবেচনা করুন:

Pitching[ , .SD]
#         playerID yearID teamID  W  L  G   ERA
#     1: bechtge01   1871    PH1  1  2  3  7.96
#     2: brainas01   1871    WS3 12 15 30  4.50
#     3: fergubo01   1871    NY2  0  0  1 27.00
#     4: fishech01   1871    RC1  4 16 24  4.35
#     5: fleetfr01   1871    NY2  0  1  1 10.00
#    ---                                       
# 44959: zastrro01   2016    CHN  1  0  8  1.13
# 44960: zieglbr01   2016    ARI  2  3 36  2.82
# 44961: zieglbr01   2016    BOS  2  4 33  1.52
# 44962: zimmejo02   2016    DET  9  7 19  4.87
# 44963:  zychto01   2016    SEA  1  0 12  3.29

এটি হ'ল আমরা সবেমাত্র ফিরে এসেছি Pitching, অর্থাত্ এটি লেখার একটি অতিরিক্ত ভার্জিক পদ্ধতি Pitchingবা Pitching[]:

identical(Pitching, Pitching[ , .SD])
# [1] TRUE

সাবসেটিংয়ের ক্ষেত্রে, .SD এখনও তথ্যের একটি উপসেট, এটি কেবল একটি তুচ্ছ (সেট নিজেই)।

কলাম সাবসেটিং: .SDcols

যুক্তিটি ব্যবহার করে থাকা কলামগুলিকে.SD সীমাবদ্ধ করে কী তা প্রভাবিত করার প্রথম উপায় :.SD.SDcols[

Pitching[ , .SD, .SDcols = c('W', 'L', 'G')]
#         W  L  G
#     1:  1  2  3
#     2: 12 15 30
#     3:  0  0  1
#     4:  4 16 24
#     5:  0  1  1
# ---         
# 44959:  1  0  8
# 44960:  2  3 36
# 44961:  2  4 33
# 44962:  9  7 19
# 44963:  1  0 12

এটি কেবল উদাহরণের জন্য এবং বেশ বিরক্তিকর ছিল। তবে এই সাধারণ ব্যবহারটি নিজেকে বিভিন্ন উপকারী / সর্বব্যাপী ডেটা ম্যানিপুলেশন অপারেশনের বিস্তৃত করে তোলে:

কলামের ধরণের রূপান্তর

ডেটা মংগিংয়ের জন্য কলামের ধরণের রূপান্তর জীবনের সত্য - এই লেখার মতো, fwriteস্বয়ংক্রিয়ভাবে পড়তে Dateবা POSIXctকলামগুলি পড়তে পারে না এবং character/ factor/ numericএর মধ্যে পিছনে রূপান্তরগুলি সাধারণ। আমরা এই জাতীয় কলামগুলির ব্যাচ-রূপান্তরকারী গ্রুপগুলি ব্যবহার করতে .SDএবং .SDcolsকরতে পারি ।

আমরা লক্ষ্য করেছি যে নিম্নলিখিত কলামগুলি ডেটা সেটে সংরক্ষণ করা characterহয়েছে Teams:

# see ?Teams for explanation; these are various IDs
#   used to identify the multitude of teams from
#   across the long history of baseball
fkt = c('teamIDBR', 'teamIDlahman45', 'teamIDretro')
# confirm that they're stored as `character`
Teams[ , sapply(.SD, is.character), .SDcols = fkt]
# teamIDBR teamIDlahman45    teamIDretro 
#     TRUE           TRUE           TRUE 

আপনি যদি sapplyএখানে ব্যবহার করে বিভ্রান্ত হন তবে লক্ষ্য করুন যে এটি বেস বেসের মতোই data.frames:

setDF(Teams) # convert to data.frame for illustration
sapply(Teams[ , fkt], is.character)
# teamIDBR teamIDlahman45    teamIDretro 
#     TRUE           TRUE           TRUE 
setDT(Teams) # convert back to data.table

এই বাক্য গঠনটি বোঝার মূল কথাটি স্মরণ করিয়ে দেওয়া যে একটি data.table(সেই সাথে ক data.frame) এমন এক হিসাবে বিবেচনা করা যেতে পারে listযেখানে প্রতিটি উপাদান একটি কলাম হয় - সুতরাং, sapply/ প্রতিটি কলামেlapply প্রযোজ্য এবং ফলাফলটি / সাধারণত হিসাবে প্রদান করে (এখানে, একটি ফেরত দেয় দৈর্ঘ্য 1, সুতরাং একটি ভেক্টর প্রদান করে)।FUNsapplylapplyFUN == is.characterlogicalsapply

এই কলামগুলিকে রূপান্তর করতে সিনট্যাক্সটি factorখুব অনুরূপ - কেবলমাত্র :=অ্যাসাইনমেন্ট অপারেটর যুক্ত করুন

Teams[ , (fkt) := lapply(.SD, factor), .SDcols = fkt]

মনে রাখবেন আমরা মোড়ানো আবশ্যক fktবন্ধনীর মধ্যে ()আর পরিবর্তে নাম দায়িত্ব অর্পণ করা চেষ্টা কলাম নামে এই ব্যাখ্যা করা, বলপূর্বক fktRHS করতে।

নমনীয়তা .SDcols(এবং :=) একটি গ্রহণ করতে characterভেক্টর বা একটি integerকলাম অবস্থানের ভেক্টর এছাড়াও কলাম নামের প্যাটার্ন-ভিত্তিক রূপান্তর জন্য উপকারে আসতে পারে *। আমরা সমস্ত factorকলামকে এতে রূপান্তর করতে পারি character:

fkt_idx = which(sapply(Teams, is.factor))
Teams[ , (fkt_idx) := lapply(.SD, as.character), .SDcols = fkt_idx]

এবং তারপরে সমস্ত কলামগুলিতে রূপান্তর করুন যা এতে teamফিরে আসে factor:

team_idx = grep('team', names(Teams), value = TRUE)
Teams[ , (team_idx) := lapply(.SD, factor), .SDcols = team_idx]

** স্পষ্টভাবে কলাম নম্বরগুলি (যেমন DT[ , (1) := rnorm(.N)]) ব্যবহার করা খারাপ অভ্যাস এবং কলামের অবস্থানগুলি পরিবর্তিত হলে সময়ের সাথে নিঃশব্দে দূষিত কোডের দিকে পরিচালিত করতে পারে। এমনকি আমরা স্পষ্টভাবে সংখ্যা ব্যবহার করা বিপজ্জনক হতে পারে যদি আমরা সংখ্যাযুক্ত সূচক কখন তৈরি করি এবং আমরা কখন এটি ব্যবহার করি তার ক্রমটির উপরে স্মার্ট / কঠোর নিয়ন্ত্রণ না রাখি।

কোনও মডেলের আরএইচএস নিয়ন্ত্রণ করছে

পরিবর্তনের মডেল স্পেসিফিকেশন মজবুত পরিসংখ্যান বিশ্লেষণের মূল বৈশিষ্ট্য। আসুন চেষ্টা করুন এবং Pitchingটেবিলে উপলব্ধ কোভারিয়েটগুলির ছোট সেটটি ব্যবহার করে কলসের ইআরএ (আর্নড রান রান গড়, পারফরম্যান্সের একটি পরিমাপ) ভবিষ্যদ্বাণী করা যাক । W(জয়) এবং এর মধ্যে ( রৈখিক) সম্পর্ক কীভাবে হয়ERAঅন্যান্য স্পেসিফিকেশনে অন্তর্ভুক্ত করা হয় তার উপর নির্ভর করে পৃথক হয়?

এখানে একটি শর্ট স্ক্রিপ্ট .SDযার শক্তিটি এই প্রশ্নটি অন্বেষণ করে le

# this generates a list of the 2^k possible extra variables
#   for models of the form ERA ~ G + (...)
extra_var = c('yearID', 'teamID', 'G', 'L')
models =
  lapply(0L:length(extra_var), combn, x = extra_var, simplify = FALSE) %>%
  unlist(recursive = FALSE)

# here are 16 visually distinct colors, taken from the list of 20 here:
#   https://sashat.me/2017/01/11/list-of-20-simple-distinct-colors/
col16 = c('#e6194b', '#3cb44b', '#ffe119', '#0082c8', '#f58231', '#911eb4',
          '#46f0f0', '#f032e6', '#d2f53c', '#fabebe', '#008080', '#e6beff',
          '#aa6e28', '#fffac8', '#800000', '#aaffc3')

par(oma = c(2, 0, 0, 0))
sapply(models, function(rhs) {
  # using ERA ~ . and data = .SD, then varying which
  #   columns are included in .SD allows us to perform this
  #   iteration over 16 models succinctly.
  #   coef(.)['W'] extracts the W coefficient from each model fit
  Pitching[ , coef(lm(ERA ~ ., data = .SD))['W'], .SDcols = c('W', rhs)]
}) %>% barplot(names.arg = sapply(models, paste, collapse = '/'),
               main = 'Wins Coefficient with Various Covariates',
               col = col16, las = 2L, cex.names = .8)

ডাব্লু, বিভিন্ন স্পেসিফিকেশন উপর ওএলএস সহগ ফিট করে

সহগের সর্বদা প্রত্যাশিত চিহ্ন থাকে (আরও ভাল কলস আরও জিততে এবং কম রানের অনুমতি দেওয়া হয়) তবে আমরা কীসের জন্য আরও নিয়ন্ত্রণ করি তার উপর নির্ভর করে বিশালতা যথেষ্ট পরিবর্তিত হতে পারে।

শর্তযুক্ত যোগদান

data.tableসিনট্যাক্স তার সরলতা এবং দৃust়তার জন্য সুন্দর। বাক্যবিন্যাসটি x[i]সাবসেটিংয়ের জন্য দুটি সাধারণ পন্থাটি নমনীয়ভাবে পরিচালনা করে - যখন iকোনও logicalভেক্টর থাকে, x[i]সেই সারিগুলি xযেখানে iরয়েছে তার সাথে ফিরিয়ে দেবে TRUE; যখন iহয় অন্যdata.table একটা join, প্লেইন আকারে (সঞ্চালিত হয় ব্যবহার keyএর গুলি xএবং i, অন্যথায়, যখনon = উল্লেখিত থাকে, তবে সেই কলামের ম্যাচ ব্যবহার করে)।

এটি সাধারণভাবে দুর্দান্ত, তবে যখন আমরা শর্তযুক্ত যোগদান করতে চাই তখন সংক্ষিপ্ত হয় , যার মধ্যে সারণির মধ্যে সম্পর্কের সঠিক প্রকৃতি এক বা একাধিক কলামের সারিগুলির কয়েকটি বৈশিষ্ট্যের উপর নির্ভর করে।

এই উদাহরণটি স্বল্প পরিমাণে সংযুক্ত, তবে ধারণাটি চিত্রিত করে; আরও দেখুন এখানে ( 1 , 2 )।

লক্ষ্যটি হ'ল টেবিলে একটি কলাম যুক্ত team_performanceকরা যা Pitchingপ্রতিটি দলের সেরা কলসীর দলের কর্মক্ষমতা (র‌্যাঙ্ক) রেকর্ড করে (কমপক্ষে recorded টি রেকর্ড করা গেমের সাথে পিচারগুলির মধ্যে সর্বনিম্ন ইআরএ দ্বারা পরিমাপ করা হয়)।

# to exclude pitchers with exceptional performance in a few games,
#   subset first; then define rank of pitchers within their team each year
#   (in general, we should put more care into the 'ties.method'
Pitching[G > 5, rank_in_team := frank(ERA), by = .(teamID, yearID)]
Pitching[rank_in_team == 1, team_performance := 
           # this should work without needing copy(); 
           #   that it doesn't appears to be a bug: 
           #   https://github.com/Rdatatable/data.table/issues/1926
           Teams[copy(.SD), Rank, .(teamID, yearID)]]

নোট করুন যে x[y]বাক্য গঠনটি nrow(y)মানগুলি দেয়, যে কারণে .SDডানদিকে থাকে Teams[.SD](যেহেতু :=এই ক্ষেত্রে আরএইচএসের nrow(Pitching[rank_in_team == 1])মান প্রয়োজন ।

দলবদ্ধ .SDক্রিয়াকলাপ

প্রায়শই, আমরা গ্রুপ পর্যায়ে আমাদের ডেটাতে কিছু অপারেশন করতে চাই । যখন আমরা নির্দিষ্ট by =(বা keyby =) নির্দিষ্ট করি, তখন data.tableপ্রক্রিয়াগুলি যখন jআপনাকে data.tableঅনেকগুলি উপাদান সাব-এসগুলিতে বিভক্ত হিসাবে ভাবা হয় তার জন্য মানসিক মডেল হ'ল data.tableপ্রত্যেকটি আপনার byপরিবর্তনশীল (গুলি) এর একক মানের সাথে মিল রাখে:

গ্রুপিং সচিত্র

এই ক্ষেত্রে, .SDপ্রকৃতি একাধিক - এটা এই উপ-প্রতিটি বোঝায় data.table, এস এক-এ-এ-সময় (সামান্য বেশি নির্ভুলভাবে, পরিধি .SDএকটি একক উপ হয় data.table)। এটি আমাদের সংক্ষিপ্তভাবে একটি অপারেশন প্রকাশ করতে দেয় যা আমরা পুনরায় একত্রিত ফলাফলটি আমাদের কাছে ফেরত দেওয়ার আগে আমরা প্রতিটি উপdata.table - উপস্থাপিত করতে চাই ।

এটি বিভিন্ন সেটিংসে দরকারী, যার মধ্যে সর্বাধিক সাধারণ এখানে উপস্থাপন করা হয়েছে:

গ্রুপ সাবসেটিং

আসুন লাহমান ডেটাতে প্রতিটি দলের জন্য অতি সাম্প্রতিক ডেটা আসুন। এটি বেশ সহজভাবে এর মাধ্যমে করা যেতে পারে:

# the data is already sorted by year; if it weren't
#   we could do Teams[order(yearID), .SD[.N], by = teamID]
Teams[ , .SD[.N], by = teamID]

পুনরাহ্বান যে .SDনিজেই একটি হল data.table, এবং যে .Nএকটি গ্রুপ (এটা সমান সারি মোট সংখ্যা উল্লেখ করে nrow(.SD)প্রতিটি দলের মধ্যে), তাই .SD[.N]ফেরৎ সম্পূর্ণতা.SD চূড়ান্ত প্রতিটি সঙ্গে যুক্ত সারিতে teamID

এর অন্য একটি সাধারণ সংস্করণ হ'ল .SD[1L]পরিবর্তে প্রতিটি দলের জন্য প্রথম পর্যবেক্ষণ পাওয়ার জন্য ব্যবহার করা।

গ্রুপ অপটিমা

ধরা যাক আমরা প্রতিটি দলের হয়ে সেরা বছরটি ফিরিয়ে দিতে চেয়েছি , যতগুলি তাদের রান করা মোট সংখ্যা দ্বারা পরিমাপ করা হয় ( R; আমরা অবশ্যই অন্যান্য মেট্রিকগুলিতে উল্লেখ করার জন্য এটি সহজেই সামঞ্জস্য করতে পারি)। প্রতিটি উপ- থেকে একটি নির্দিষ্ট উপাদান নেওয়ার পরিবর্তে data.table, আমরা এখন নিম্নলিখিত হিসাবে পছন্দসই সূচকটি গতিশীলভাবে সংজ্ঞায়িত করি :

Teams[ , .SD[which.max(R)], by = teamID]

মনে রাখবেন যে এই পদ্ধতির অবশ্যই প্রতিটিটির জন্য .SDcolsকেবলমাত্র কিছু অংশ ফিরে পাওয়ার জন্য একত্রিত করা যেতে পারে (যে সাবধানতাটি বিভিন্ন উপসাগর জুড়ে স্থির করা উচিত)data.table.SD.SDcols

এনবি : .SD[1L]বর্তমানে GForce( আরও দেখুন ), data.tableঅভ্যন্তরীণরা যেগুলি সবচেয়ে সাধারণ গ্রুপযুক্ত ক্রিয়াকলাপগুলিকে ব্যাপকভাবে গতি দেয় sumবা mean- ?GForceআরও বিশদ বিবরণ দেখুন এবং এই ফ্রন্টের আপডেটগুলির জন্য বৈশিষ্ট্য উন্নতির অনুরোধগুলির জন্য / ভয়েস সাপোর্টের দিকে নজর রাখবে : দ্বারা অভ্যন্তরীণগুলি বর্তমানে অনুকূলিত হয়েছে : 1 , 2 , 3 , 4 , 5 , 6

গ্রুপযুক্ত রিগ্রেশন ression

ERAএবং এর মধ্যে সম্পর্কের বিষয়ে উপরের তদন্তে ফিরে আসা W, ধরুন আমরা আশা করি এই সম্পর্কটি দলের দ্বারা পৃথক হবে (অর্থাত, প্রতিটি দলের জন্য আলাদা aাল রয়েছে)। নিম্নরূপে এই সম্পর্কের বৈচিত্র্য অন্বেষণ করতে আমরা সহজেই এই রিগ্রেশনটি আবার চালাতে পারি (এই পদ্ধতির মানক ত্রুটিগুলি সাধারণত ভুল বলে উল্লেখ করে - স্পেসিফিকেশনটি ERA ~ W*teamIDআরও ভাল হবে - এই পদ্ধতিটি পড়া সহজ এবং সহগুণগুলি ঠিক আছে) :

# use the .N > 20 filter to exclude teams with few observations
Pitching[ , if (.N > 20) .(w_coef = coef(lm(ERA ~ W))['W']), by = teamID
          ][ , hist(w_coef, 20, xlab = 'Fitted Coefficient on W',
                    ylab = 'Number of Teams', col = 'darkgreen',
                    main = 'Distribution of Team-Level Win Coefficients on ERA')]

লাগানো সহগের বিতরণ

বৈষম্যতার মোটামুটি পরিমাণ থাকা অবস্থায়, পর্যবেক্ষণকৃত সামগ্রিক মানটির চারপাশে একটি স্বতন্ত্র ঘনত্ব রয়েছে

আশা করি এটি .SDসুন্দর, দক্ষ কোডগুলিতে সুবিধার্থে শক্তিটির বর্ণনা দিয়েছে data.table!


5
ভাল ব্যাখ্যা। মাত্র একটি মন্তব্য: টিমগুলির পরিবর্তে [,। এসডি [যা.ম্যাক্স (আর)], = টিআইডিআইডি] দ্বারা, আপনি দ্রুত ডেটা টেবিল অর্ডার ফাংশনটি কাজে লাগাতে পারেন: টিমগুলির মাধ্যমে [অর্ডার (টিমআইডি, -আর), .এসডি [ 1L], কীবি = টিমআইডি], এটি দ্রুত হওয়া উচিত।
bartleby

@ বার্টলিবিকে ধন্যবাদ, প্রকৃতপক্ষে এটি সঠিক, তবে সাধারণ পদ্ধতিটি এখনও তা জানতে দরকারী - যেমন আমাদের যদি গ্রুপ-নির্ভর পরিমাণ অনুসারে আদেশ করতে হয়। সম্ভবত আমি উদাহরণটি পরিবর্তন করব।
মাইকেলচিরিকো

3

.SD সম্পর্কে ম্যাট ডোলের সাথে কথা বলার পরে আমি এই সম্পর্কে একটি ভিডিও করেছি, আপনি এটি ইউটিউবে দেখতে পারেন: https://www.youtube.com/watch?v=DwEzQuYfMsI


2
দুর্ভাগ্যক্রমে, স্ট্যাক ওভারফ্লো সাধারণত জবাবগুলি স্বাগত জানায় না যা মূলত বাইরের লিঙ্কগুলির সমন্বিত। সম্ভবত আপনি এটিতে আরও পাঠ্য এবং কোড তথ্য সম্পাদনা করতে চান? ফাই ম্যাট আপনার ভিডিওটি উইকিতে যুক্ত করেছেন: github.com/Rdatatable/data.table/wiki/Pferencesations
ফ্রাঙ্ক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.