আর-তে কীভাবে ডেটা ফ্রেম বাড়ানো যায়


15

আর এর সাথে কিছু বিশ্লেষণ করার সময় আমার নিম্নলিখিত সমস্যা হচ্ছে

আমার এই জাতীয় ডেটাফ্রেম রয়েছে:

Name | Group | Count
Person 1 | A | 3
Person 2 | A | 1
Person 3 | A | 0
Person 1 | B | 5 
Person 2 | B | 0
Person 3 | B | 1
Person 1 | C | 1

এবং আমার এটির "প্রসারিত" করতে হবে (সঠিক শব্দটি কিনা তা নিশ্চিত নয়) এর মতো হতে হবে:

Person 1 | A
Person 1 | A
Person 1 | A
Person 2 | A
Person 1 | B
Person 1 | B

প্রভৃতি

সুতরাং এটি জুটি ব্যক্তি 1 এবং A এর মূল্য নেয় (উদাহরণস্বরূপ, 3) এবং ব্যক্তি 1 এবং A দিয়ে তিনটি সারি তৈরি করে এবং প্রতিটি ব্যক্তির জন্য এটি করে - গ্রুপ-সংমিশ্রণ। অনলাইনে অনুসন্ধানের জন্য কোনও ভাল শব্দ বের করতে পারে না।



আপনার reshape2প্যাকেজটি আর-তে অন্বেষণ করা উচিত It এটি dputউদাহরণস্বরূপ 2 ডেটাফ্রেমে সহায়তা করতে পারে : একটি ইনপুট সহ এবং একটি আউটপুট সহ।
জাচ

আমি একটি উত্তর সরবরাহ করেছি তবে আমি এটি একটি পরিসংখ্যানগত প্রশ্নের চেয়ে আর প্রোগ্রামিং প্রশ্নটি অনুমান করি, তাই সম্ভবত এটি অন্য কোথাও স্থানান্তরিত হওয়া উচিত।
গালা

উত্তর এবং আমার প্রশ্নের বিন্যাসে সহায়তা করার জন্য গলকে ধন্যবাদ জানাই।
জুহা-মাট্টি এস।

উত্তর:


10

যদিও এটা খুব দরকারী প্যাকেজ, আমি মনে করি পুনর্নির্মাণ এই ক্ষেত্রে Overkill হয়, প্রতিনিধির কাজ করতে পারেন।

এখানে কিছু উদাহরণ ডেটা:

df <- data.frame(
     name=c("Person 1", "Person 2", "Person 3", "Person 1", "Person 2", "Person 3"),
     group=c("A", "A", "A", "B", "B", "B"),
     count=c(3,1,0,5,0,1))

এখন, এটি "প্রসারিত" করতে:

expanded <- data.frame(name = rep(df$name, df$count),
                       group = rep(df$group, df$count))

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


7
এই সম্পর্কে df[rep(seq_len(nrow(df)), df$count), 1:2]:?
chl

@ সিএল, আপনি স্যার উজ্জ্বল!
ক্রিস

15

পুনরায় আকার প্যাকেজ থেকে আপনি অযোগ্য ফাংশনটি ব্যবহার করতে পারেন।

উপরের ডিএফ দেওয়া (@ গাল লরানস দ্বারা)

library(reshape)

expanded<-untable(df[,c(1,2)], num=df[,3])

name group
1   Person 1     A
1.1 Person 1     A
1.2 Person 1     A
2   Person 2     A
4   Person 1     B
4.1 Person 1     B
4.2 Person 1     B
4.3 Person 1     B
4.4 Person 1     B
6   Person 3     B

untableআমি আমার মন্তব্যে যা উল্লেখ করেছি ঠিক তা করে :-)) ফাংশনটি আমাকে মনে করিয়ে দেওয়ার জন্য ধন্যবাদ!
chl

1

এবং এখন uncountথেকে tidyrউপরের মতো একই ফলাফল দেয়।

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