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


116

আমি একটি ডেটা ফ্রেমের সারি থেকে একটি ভেক্টর তৈরি করতে চাই। তবে আমি সারি এবং কলামের নাম রাখতে চাই না। আমি বেশ কয়েকটি জিনিস চেষ্টা করেছিলাম ... তবে ভাগ্য হয়নি।

এটি আমার ডেটা ফ্রেম:

> df <- data.frame(a=c(1,2,4,2),b=c(2,6,2,1),c=c(2.6,8.2,7.5,3))
> df
  a b   c
1 1 2 2.6
2 2 6 8.2
3 4 2 7.5
4 2 1 3.0

আমি চেষ্টা করেছিলাম:

> newV <- as.vector(df[1,])
> newV
  a b   c
1 1 2 2.6

তবে আমি সত্যই কিছু দেখতে চাই:

> newV <- c( 1,2,2.6)
> newV
[1] 1.0 2.0 2.6

আমি আপনাকে সঠিকভাবে প্রদর্শিত ডেটা ফর্ম্যাট করার পরামর্শ দিচ্ছি format দেখে মনে হচ্ছে আপনি কিছু রেখা বিরতি নিচ্ছেন।
চিন্ময় পাতিল

আমি এক সারি চাই। সারি '1' এবং কলাম 'এ' নয়।
জোকো

কোনও ডেটা ফ্রেমের সমস্ত সারিগুলিতে এটি প্রয়োগ করার এবং এর মাধ্যমে সমস্ত ভেক্টরকে একটি একক ভেক্টরে মার্জ করার কোনও উপায় আছে কি?
স্টেফেনমগ

1
@stephanmg: ভালো কিছু সম্পর্কে কি c(t(as.matrix(df)))?
Andri Signorell

আন্দ্রি: এটি কাজ করছে, যদিও আমিও এটি অন্যরকমভাবে সমাধান করতে পারতাম।
স্টেফানমগ

উত্তর:


154

আপনি যখন একটি ডেটা ফ্রেম থেকে একটি একক সারি বের করেন আপনি একটি সারি ডেটা ফ্রেম পাবেন। এটিকে একটি সংখ্যক ভেক্টরে রূপান্তর করুন:

as.numeric(df[1,])

@ রোল্যান্ডের পরামর্শ অনুসারে, unlist(df[1,])নামগুলি বাদ না দিয়ে এক-সারি ডেটা ফ্রেমকে একটি সংখ্যক ভেক্টরে রূপান্তর করবে। অতএব unname(unlist(df[1,]))একই ফলাফলটিতে পৌঁছানোর জন্য আরেকটি স্পষ্ট উপায়।

নীচে @ জোশ মন্তব্য করেছেন, আপনার যদি সম্পূর্ণরূপে-অংক-সংক্রান্ত (বর্ণানুক্রমিক, গুণক, মিশ্র ...) ডেটা ফ্রেম থাকে তবে as.character(df[1,])তার পরিবর্তে আপনার প্রয়োজন ।


কোড দেওয়ার জন্য ওপি-তে এটি +1 (বা 0 ডাউন-ভোট) হতে পারে যা পরিষ্কারভাবে চিত্রিত করেছিল যে তারা কী চেয়েছিল, যদিও প্রশ্নের টেক্সট এবং শিরোনামটি
সমাহিত করা হয়েছে

@ চিন্ময়পতিল, তাদের অন্যান্য বিকল্পগুলি কী? তাদের কোড উদাহরণটি অবশ্যই এটিকে দেখতে চায় যা তারা চায়।
বেন বলকার

2
এটি লক্ষ করা উচিত যে একটি ডেটা ফ্রেম ইতিমধ্যে একটি ভেক্টর এবং অতএব as.vector দেখায় এটি মোড "তালিকার" ভেক্টর এবং কিছুই করে না। অন্তর্নিহিত প্রক্রিয়াগুলি বোঝার সুবিধার্থে as.vector (df [1,], মোড = "সংখ্যাসূচক") চেষ্টা করুন যা আরও চিত্রিত। এটি as.numeric কি করে।

1
সমস্যা নেই. আমি কেবল উল্লেখ করছি যে এই সমস্যার জন্য তারা ঠিক একই উত্তর দেয়।
বেন বলকার

1
এর মধ্যেই পরিবর্তন করা যেতে পারে তবে আজ তালিকাভুক্তি নাম বাদ দেওয়ার অনুমতি দেয়: identical(unlist(df[1,], use.names = FALSE), as.numeric(df[1,])) (এবং বিটিডব্লু ডিএফ এখনও ডেটাফ্রেমের জন্য বুদ্ধিমান নাম নয় ... ;-))
আন্দ্রি সিগনর

45

আমি সুপারিশ unlist, নাম রাখে যা।

unlist(df[1,])
  a   b   c 
1.0 2.0 2.6 

is.vector(unlist(df[1,]))
[1] TRUE

আপনি যদি নামযুক্ত ভেক্টর না চান:

unname(unlist(df[1,]))
[1] 1.0 2.0 2.6

7

আপনি যদি সংখ্যায় পরিবর্তন করতে না চান তবে আপনি এটি চেষ্টা করে দেখতে পারেন।

> as.vector(t(df)[,1])
[1] 1.0 2.0 2.6

3
এটা আমার অনেক অর্থে দেখা যায় না: str(as.vector(t(df)[,1]))হয় num [1:3] 1 2 2.6, অর্থাত্ আপনার কোড নেই একটি সাংখ্যিক ভেক্টর ফলাফল রূপান্তর ...
বেন Bolker

2
বিশেষত, যখন আপনি t(df)আর ব্যবহার করেন ডেটা ফ্রেমটি একটি ম্যাট্রিক্সে coerces, এক্ষেত্রে একটি সংখ্যা ম্যাট্রিক্স কারণ সমস্ত উপাদানগুলি সংখ্যাসূচক। তারপরে [,1]প্রথম কলামটি বের করুন (একটি সংখ্যক ভেক্টর, কারণ অপ্রয়োজনীয় মাত্রা স্বয়ংক্রিয়ভাবে বাদ পড়েছে)। as.vector()কেবল নামগুলি ড্রপ করে (যা আপনি এটি দিয়েও করতে পারেন unname())।
বেন বলকার

এটি চরিত্রগুলির জন্যও কাজ করে বলে মনে হচ্ছে। তবে আপনি জালিয়াতি সম্পর্কে সঠিক। FWIW, আমার সমাধান পাশাপাশি চরিত্র ডেটা ফ্রেম কাজ করবে .. সব তথ্য সতর্কীকরণ সঙ্গে অক্ষরে রূপান্তরিত হচ্ছে
Chinmay পাতিল

2
আমি বলব যে unname(unlist(x))সমাধানটি আরও ভাল (আরও দক্ষ এবং আরও স্বচ্ছ)।
বেন বলকার

as.vector(t(df)[,1])আমি এটা ভালোবাসি ! ঠিক আমার কী দরকার!
উথার পেনড্রাগন

7

এখানে একটি dplyrভিত্তিক বিকল্প:

newV = df %>% slice(1) %>% unlist(use.names = FALSE)

# or slightly different:
newV = df %>% slice(1) %>% unlist() %>% unname()

2

মনে রাখবেন যে আপনার সারিটিতে কোনও উপাদান রয়েছে কিনা আপনাকে সতর্কতা অবলম্বন করতে হবে। এখানে একটি উদাহরণ:

df_1 = data.frame(V1 = factor(11:15),
                  V2 = 21:25)
df_1[1,] %>% as.numeric() # you expect 11 21 but it returns 
[1] 1 21

এখানে অন্য একটি উদাহরণ রয়েছে (ডিফল্ট ডেটাফ্রেম দ্বারা (ফ্রেমগুলি অক্ষরে ফ্যাক্টারে রূপান্তর করে))

df_2 = data.frame(V1 = letters[1:5],
                  V2 = 1:5)
df_2[3,] %>% as.numeric() # you expect to obtain c 3 but it returns
[1] 3 3
df_2[3,] %>% as.character() # this won't work neither
[1] "3" "3"

এই আচরণটি রোধ করতে, আপনাকে ফ্যাক্টরটি বের করার আগে, যত্ন নেওয়া উচিত:

df_1$V1 = df_1$V1 %>% as.character() %>% as.numeric()
df_2$V1 = df_2$V1 %>% as.character()
df_1[1,] %>% as.numeric()
[1] 11  21
df_2[3,] %>% as.character()
[1] "c" "3"

-3

ডেটা ফ্রেমের কলামগুলি ইতিমধ্যে ভেক্টর, আপনাকে কেবল তাদের এড়িয়ে যেতে হবে। নোট করুন যে আপনি কলামের পরে কলামটি চান তা আগে রেখেছেন:

> newV <- df[,1]
> newV
[1] 1 2 4 2

যদি আপনি আসলে একটি সারি চান, তবে বেন যা বলেছেন তা করুন এবং দয়া করে ভবিষ্যতে শব্দগুলি সঠিকভাবে ব্যবহার করুন।


তবে আমার মনে হয় ওপি প্রথম সারিতে চায় ?
বেন বলকার

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