সারি নামগুলিকে প্রথম কলামে রূপান্তর করুন


147

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

df
              VALUE              ABS_CALL DETECTION P-VALUE    
    1007_s_at "957.729231881542" "P"      "0.00486279317241156"
    1053_at   "320.632701283368" "P"      "0.0313356324173416" 
    117_at    "429.842323161046" "P"      "0.0170004527476119" 
    121_at    "2395.7364289242"  "P"      "0.0114473584876183" 
    1255_g_at "116.493632746934" "A"      "0.39799368200131"   
    1294_at   "739.927122116896" "A"      "0.0668649772942343" 

আমি প্রথম কলামে সারির নামগুলি রূপান্তর করতে চাই। প্রথম কলাম হিসাবে সারির নাম তৈরি করতে বর্তমানে আমি এরকম কিছু ব্যবহার করছি:

  d <- df
  names <- rownames(d)
  rownames(d) <- NULL
  data <- cbind(names,d)

এটি করার জন্য একটি লাইন আছে?



12
আপনার অতিরিক্ত প্যাকেজগুলির দরকার নেই, এখানে একটি ওয়ান-লাইনার রয়েছে:d <- cbind(rownames(d), data.frame(d, row.names=NULL))
ssp3nc3r

মন্তব্য @ ssp3nc3r দ্বারা একটি গ্রহণযোগ্য উত্তর হওয়া উচিত
Hrant

উত্তর:


119

আপনি উভয়ই সারির নাম মুছে ফেলতে এবং প্যাকেজটি থেকে এর আর্গুমেন্ট ব্যবহার করে এবং রেফারেন্স (মেমরিটি পুনরায় ব্যবহার না করে ->) দিয়ে একটি কলামে রূপান্তর করতে পারেনsetDTkeep.rownames = TRUEdata.table

library(data.table)
setDT(df, keep.rownames = TRUE)[]
#    rn     VALUE  ABS_CALL DETECTION     P.VALUE
# 1:  1 1007_s_at  957.7292         P 0.004862793
# 2:  2   1053_at  320.6327         P 0.031335632
# 3:  3    117_at  429.8423         P 0.017000453
# 4:  4    121_at 2395.7364         P 0.011447358
# 5:  5 1255_g_at  116.4936         A 0.397993682
# 6:  6   1294_at  739.9271         A 0.066864977

@ স্নোরাম দ্বারা উল্লিখিত হিসাবে, আপনি নতুন কলামটি আপনার যে কোনও নাম দিতে পারেন, উদাহরণস্বরূপ setDT(df, keep.rownames = "newname")সারিগুলির কলাম হিসাবে " নতুন নাম " যুক্ত করা হবে।


5
colnames(df)[1] <- "newname"প্রয়োজনে প্রথম কলামটির নাম পরিবর্তন করতে ব্যবহার করুন ।
স্বেতাভ

5
@ স্বেতাভ ভাল, না। setnames(df, 1, "newname")হয় data.tableউপায়।
ডেভিড আরেনবুর্গ

@ ডেভিড আরেনবুর্গ ওয়েল, (কমপক্ষে) এখন আপনি একই কলটিতে এটি করতে পারেনsetDT(df, keep.rownames = "newname")[]
সিন্ড্রি_বলদুর

1
@ ডেভিডআরেনবুর্গ ডকুমেন্টেশনের জন্য খুঁজে পেয়েছেন as.data.table(): যদি সত্য হয় তবে ইনপুট অবজেক্টের নামগুলি পৃথক কলাম হিসাবে "আরএন" যুক্ত করে। keep.rownames = "আইডি" এর পরিবর্তে কলামটির "আইডি" নাম দেয়
সিন্ড্রি_বলদুর

1
@ স্নোরাম ভাল সন্ধান করুন, ডক্সকে সামঞ্জস্যপূর্ণ করার জন্য আমি একটি PR তৈরি করব।
ডেভিড আরেনবুর্গ

140

অথবা আপনি ব্যবহার করতে পারেন dplyrs 'এর add_rownamesযা ডেভিড এর উত্তর হিসাবে একই জিনিস আছে:

library(dplyr)
df <- tibble::rownames_to_column(df, "VALUE")

আপডেট (২০১ 2016 সালের মাঝামাঝি): (উপরে বর্ণিত)

পুরানো ফাংশন নামকটিকে অবহেলা add_rownames()করা হয়েছে এবং প্রতিস্থাপিত করা হচ্ছে tibble::rownames_to_column()(একই ফাংশন, তবে হ্যাডলি dplyrকিছুটা রিফেক্টর করলেন )।


14
হুবহু এক নয় , কারণ এটি রেফারেন্স দ্বারা এটি করছে না :)
ডেভিড আরেনবুর্গ

1
আপডেট: ডিপিপ্লায়ার আপডেটের জন্য একটি টিবিবল :: rownames_to_column () ব্যবহার করতে হবে যেহেতু dplyr :: rownames হ্রাস করা হয়েছে।
ইডেন্নিস

কেউ যদি পরিশ্রমের মধ্যে থাকতে চান তবে এটি দুর্দান্ত
Euler_Salter

83

একটি লাইনের বিকল্পটি হ'ল:

df$names <- rownames(df)

12
আমি আশা করি আপনি এটি সম্পর্কে অবগত আছেন যে এটি rownamesশেষের দিকে কলাম হিসাবে যুক্ত হয়েছে, প্রকৃতপক্ষে প্রথম কলাম হিসাবে নয়।
আগাজ হুসেন

30

বিকল্পভাবে, আপনি একটি নতুন ডেটাফ্রেম তৈরি করতে পারেন (বা বর্তমানটিকে ওভাররাইট করতে পারেন, নীচের উদাহরণ হিসাবে) যাতে আপনার কোনও বাহ্যিক প্যাকেজ ব্যবহার করার প্রয়োজন হয় না। তবে এই উপায়ে বিশাল ডেটা ফ্রেমগুলি কার্যকর নাও হতে পারে।

df <- data.frame(names = row.names(df), df)

10
বা:df <- cbind(names = rownames(df), df)
মার্ক মিলার

15

উপরে আমার পরামর্শ অনুসারে আমার মন্তব্যে উত্তরে স্থানান্তরিত:

আপনার অতিরিক্ত প্যাকেজ দরকার নেই, এখানে একটি ওয়ান-লাইনার রয়েছে:

d <- cbind(rownames(d), data.frame(d, row.names=NULL))

4

dplyr::as_data_frame(df, rownames = "your_row_name") আপনাকে আরও সহজ ফলাফল দেবে।


2
পোস্টারটির জন্য হেক্টরহ্যাফেনডেন এটি সম্পাদনা করেছেন, কারণ এটি আসলে একটি দুর্দান্ত পরামর্শ।
Tjebo

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