কলামের নাম অনুসারে একটি ডেটা ফ্রেমের কলামগুলি বাছাই করুন


93

এটি সম্ভবত একটি সহজ প্রশ্ন, তবে আমি জানি না কীভাবে কলামগুলি বর্ণমালা অনুসারে অর্ডার করতে হয়।

test = data.frame(C = c(0, 2, 4, 7, 8), A = c(4, 2, 4, 7, 8), B = c(1, 3, 8, 3, 2))

#   C A B
# 1 0 4 1
# 2 2 2 3
# 3 4 4 8
# 4 7 7 3
# 5 8 8 2

আমি কলামগুলি বর্ণমালা অনুসারে কলামগুলি ক্রম অনুসারে অর্ডার করতে চাই achieve

#   A B C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8

অন্যদের জন্য আমি আমার নিজস্ব নির্ধারিত আদেশ চাই:

#   B A C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8

দয়া করে মনে রাখবেন যে আমার ডেটাসেটগুলি 10000 ভেরিয়েবল সহ বিশাল। সুতরাং প্রক্রিয়াটি আরও স্বয়ংক্রিয় হওয়া দরকার।

উত্তর:


137

আপনি ব্যবহার করতে পারেন orderউপর names, এবং ব্যবহার করে কলাম যখন subsetting অর্ডার:

test[ , order(names(test))]
  A B C
1 4 1 0
2 2 3 2
3 4 8 4
4 7 3 7
5 8 2 8

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

উদাহরণস্বরূপ আপনার পছন্দসই অর্ডার নির্দিষ্ট করে এমন টার্গেট ভেক্টর অনুসারে একটি ডেটা ফ্রেমের সারিগুলিতে অর্ডার করাতে পারে , অর্থাত আপনি পছন্দসই কলামের অর্ডারযুক্ত টার্গেট ভেক্টরের বিরুদ্ধে matchআপনার ডেটা ফ্রেম করতে পারেন cannames


4
বিশদভাবে জানাতে, পরীক্ষা [, c (2,3,1)] বা পরীক্ষা [, c ('এ', 'বি', 'সি')] এ, বি, সি কলামের ক্রম তৈরি করবে। "[" অপারেটর আপনি কী করতে চান তা নির্ধারণ করতে খুব চালাক।
কার্ল উইথফট 14

4
আপনাকে ধন্যবাদ, আমি সরবরাহিত সাহায্যের সাথে দ্বিতীয় প্রশ্নটি বের করেছিলাম; মায়র্ডার = সি ("বি", "এ", "সি"), পরীক্ষা [, মায়ারর্ড]
জন ক্লার্ক

আমি যেভাবে চাই সেভাবে কলামগুলি বাছাই করার কোনও উপায় আছে (সিএবি বলুন)?
TYZ

আপনি এই তথ্যটি ব্যবহার করতে পারেন যে একটি ডেটা.ফ্রেম একটি তালিকা এবং এটিকে সহজ করে test[ order(names(test)) ]
তোলে

4
কোনটি @naco, উৎস পড়া colnames: এটা কলিং শেষ পর্যন্ত namesএকটি জন্য data.frame
জেমস

27

dplyrকেউ পাইপের সাহায্যে এটি করতে চাইলে বাধ্যতামূলক উত্তরটি এখানে দেওয়া হয় ।

test %>% 
    select(sort(names(.)))

4
আমার পক্ষে এটি ভাল কাজ করেছে যেহেতু আমি প্রথমে চাই ভেরিয়েবলগুলি নির্বাচন করা সহজ। আসল test%>%select(b,sort(names(.)))
ডিএফের সাথে লেগে থাকা

পছন্দ করুন আমি এটা ভাবিনি।
অ্যান্ড্রু ব্রাজা

14
test = data.frame(C=c(0,2,4, 7, 8), A=c(4,2,4, 7, 8), B=c(1, 3, 8,3,2))

সাধারণ নিম্নলিখিত ফাংশন প্রতিস্থাপন ব্যবহার করে সম্পাদন করা যেতে পারে (তবে কেবলমাত্র ডেটা ফ্রেমে অনেক কলাম না থাকলে):

test <- test[, c("A", "B", "C")]

অন্যদের জন্য:

test <- test[, c("B", "A", "C")]



2

একটি নির্দিষ্ট কলামটি প্রথমে আসার জন্য, তারপর বাকী বর্ণানুক্রমিকভাবে, আমি এই সমাধানটি প্রস্তাব করব:

test[, c("myFirstColumn", sort(setdiff(names(test), "myFirstColumn")))]

এবং যদি আপনি একাধিক কলামটি প্রথম হতে চান তবে কি?
ম্যাকসেম মরোজ

2

একটি বিকল্প বিকল্পটি যুক্তি সহ str_sort()লাইব্রেরি স্ট্রিংয়ের থেকে ব্যবহার করা numeric = TRUE। এটি কলামটি সঠিকভাবে অর্ডার করবে যাতে কেবল বর্ণমালায় নয় সংখ্যাগুলি অন্তর্ভুক্ত করে :

str_sort(c("V3", "V1", "V10"), numeric = TRUE)

# [1] V1 V3 V11


1

উপরের অন্যান্য বাক্য গঠনগুলির মতো তবে শেখার জন্য - আপনি কলামের নাম অনুসারে বাছাই করতে পারেন?

sort(colnames(test[1:ncol(test)] ))

[1:ncol(test)]এখানে কিছু করছেন না, এটা ঠিক একটি লম্বা পথ লিখতে এর sort(colnames(test))
গ্রেগর থমাস

0

আমার ডেটা সেটের সাথে একই রকম সমস্যা অর্জন করতে আমি যা জানতে পেরেছি তা এখানে।

প্রথমে, জেমস উপরে বর্ণিত যা করেন, তাই করুন

test[ , order(names(test))]

দ্বিতীয়ত, ডেটা ফ্রেমের শুরুতে নির্দিষ্ট আগ্রহের কলামগুলি (যেমন, "ডি", "জি", "কে") সরানোর জন্য ডিপ্লায়ারে সমস্ত কিছু () ফাংশনটি ব্যবহার করুন এবং সেইগুলির পরে বর্ণমালা অনুসারে কলামগুলি রেখে দিন।

select(test, D, G, K, everything())

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

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