এন সমান গ্রুপে ডেটা বিভক্ত করুন


11

আমার কাছে একটি ডেটাফ্রেম রয়েছে যাতে 4 টি কলাম জুড়ে মান রয়েছে:

উদাহরণস্বরূপ: ID, price, click count,rating

আমি যা করতে চাই তা হল এই তথ্য ফ্রেমটিকে এন বিভিন্ন গ্রুপে "বিভক্ত" করা যেখানে প্রতিটি গ্রুপের দামের সমান বন্টন সহ সারির সমান সংখ্যক সারি থাকবে, ক্লিক গণনা এবং রেটিং গুণাবলী।

যে কোনও পরামর্শের তীব্র প্রশংসা করা হয়েছে, যেহেতু এটি কীভাবে সামাল দেওয়া যায় সে সম্পর্কে আমার সামান্যতম ধারণা নেই!


আপনি কি কেবল N এর জন্য পৃথক ডেটা ফ্রেম তৈরি করতে চাইছেন যা মূলটির উপগ্রহগুলিকে আলাদা করে দেয়? দাম, ক্লিকের গণনা এবং রেটিংয়ের "একই বিতরণ" বলতে কী বোঝ?
অ্যালেক্স এ।

হ্যাঁ, মূল ডেটা ফ্রেমের সাবসেটগুলি সন্ধান করছেন। আপনার দ্বিতীয় প্রশ্নে, ধরুন আমার কাছে 1 থেকে 10 অবধি পরিদর্শনের মান রয়েছে এবং 3 টি আলাদা সাবসেট তৈরি করার সিদ্ধান্ত নিয়েছে, সুতরাং 1 থেকে 4 টি ভিজিট কাউন্ট বালতিতে প্রতিটি গ্রুপে কয়েকটি সারি নির্বাচন করবে, 4 থেকে 7 টি ভিজিট কাউন্ট বালতি এবং কিছু সারি নির্বাচন করবে কিছু 7 থেকে 10 ভিজিট কাউন্ট বালতি এবং এটি সমস্ত বৈশিষ্ট্য (মূল্য, ক্লিক গণনা এবং রেটিং) এর সাথে সন্তুষ্ট হওয়া উচিত। এটি বৈশিষ্ট্যের সমান সম্ভাবনা সহ বিভিন্ন গ্রুপে ডেটা স্যাম্পল করার মতো। আশাকরি এটা সাহায্য করবে.


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

আপনার কি কেবলমাত্র প্রান্তিক বিতরণ বা যৌথ বন্টন সংরক্ষণ করার অর্থ?
কেজেটিল বি হালওয়ারসেন

উত্তর:


12

যদি আমি প্রশ্নটি সঠিকভাবে বুঝতে পারি তবে এটি আপনি যা চান তা পাবেন। আপনার ডেটা ফ্রেমটি কল করা dfএবং আপনি Nসংজ্ঞায়িত করে ধরে নিয়েছেন , আপনি এটি করতে পারেন:

split(df, sample(1:N, nrow(df), replace=T))

এটি ডেটা ফ্রেমের একটি তালিকা ফিরিয়ে দেবে যেখানে প্রতিটি ডেটা ফ্রেম এলোমেলোভাবে নির্বাচিত সারি সমন্বিত থাকে df। ডিফল্টরূপে sample()প্রতিটি গ্রুপের সমান সম্ভাবনা বরাদ্দ করবে।


6

এটি খুব দেরিতে উত্তর, তবে উল্লিখিত সমস্যাটি কোথাও কোথাও আলোচনা করা হয়েছে কিনা তা গুগল করার সময় আমি এই পৃষ্ঠাটি পেয়েছি। এখন থেকে কেউ এই পৃষ্ঠাটি খুঁজে পেলে আমার উত্তরটি সহায়তা করবে।

আমি একটি আর প্যাকেজ লিখেছিলাম, যা প্রশ্নটি যা চেয়েছিল ঠিক তাই করে: এটি data.frameএক বা একাধিক মানদণ্ডে গ্রুপগুলির মধ্যে পার্থক্য হ্রাস করার চেষ্টা করার সময় একটি এন লাগে এবং এন বিভিন্ন গ্রুপ তৈরি করে। এটি পুনরাবৃত্ত র্যান্ডম অ্যাসাইনমেন্টের উপর ভিত্তি করে একটি সহজ পদ্ধতি ব্যবহার করে , যা অনুমোদিত প্রতিক্রিয়াতে প্রস্তাবিত পদ্ধতিও।

এটি প্যাকেজ minDiff লিঙ্ক :

বর্ণিত সমস্যা মোকাবেলা করতে আপনি এটি ব্যবহার করতে পারেন:

library(minDiff)
assigment <- create_groups(dataframe, criteria_scale = c("price", "click count", "rating"), sets_n = N, repetitions = 1000)

repetitionsযুক্তি নির্ধারণ করবে কত ঘন ঘন আপনি এলোমেলোভাবে বিভিন্ন গ্রুপের তৈরি করুন। সেরা অ্যাসাইনমেন্ট - যা দলের মধ্যে ন্যূনতম পার্থক্য রয়েছে - ফিরিয়ে দেওয়া হবে।


5

যদিও অ্যালেক্স এ এর ​​উত্তর প্রতিটি গ্রুপের জন্য সমান সম্ভাবনা দেয়, তবে গ্রুপগুলির জন্য সমান সংখ্যক সারি থাকার প্রশ্নের অনুরোধটি পূরণ করে না। আর তে:

stopifnot(nrow(df) %% N == 0)
df    <- df[order(runif(nrow(df))), ]
bins  <- rep(1:N, nrow(df) / N)
split(df, bins)

3
গৃহীত উত্তরের ঘাটতিগুলি সম্পর্কে আপনার পর্যবেক্ষণটি ভাল। যাইহোক, আপনার উত্তর এখনও আগ্রহের প্রশ্নটির অংশটিকে সম্বোধন করে না (এবং এটি এখানে বন্ধ না করার একমাত্র কারণ): আপনি প্রতিটি গ্রুপের "দামের একই বন্টন, ক্লিক গণনা এবং রেটিং বৈশিষ্ট্যগুলি" কীভাবে অর্জন করবেন? ?
whuber

@ কী আপনি এখানে একটি উত্তর প্রস্তাব করতে পারেন?
লিও লোপোল্ড হার্টজ 준영

উত্তরটি "একই বিতরণ" অর্থ কী তার উপর নির্ভর করতে হবে। এটি প্রতীয়মান হয় যে প্রশ্নটি চারটি ভেরিয়েবলের ভিত্তিতে ক্লাস্টার পর্যবেক্ষণ করতে বলছে , যেখানে প্রতিটি ক্লাস্টারে একই সংখ্যার পর্যবেক্ষণ রয়েছে having এটি করার জন্য অগণিত উপায় রয়েছে।
whuber

0

এটি tidyr / dplyr ব্যবহার করে নেস্টিংয়ের মাধ্যমে সমাধান করা যেতে পারে

require(dplyr) 
require(tidyr)

num_groups = 10

iris %>% 
   group_by((row_number()-1) %/% (n()/num_groups)) %>%
   nest %>% pull(data)
```
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.