কীভাবে ডেটা.টিবল কলামগুলি (অনুলিপি ছাড়াই) পুনঃক্রম করতে হবে


118

আমি আমার মধ্যে পুনর্বিন্যাস কলাম চাই data.table x, কলাম নামের একটি চরিত্র ভেক্টর দেওয়া neworder:

library(data.table)
x <- data.table(a = 1:3, b = 3:1, c = runif(3))
neworder <- c("c", "b", "a")

স্পষ্টতই আমি এটি করতে পেরেছিলাম:

x[ , neworder, with = FALSE]
# or
x[ , ..neworder]
#            c b a
# 1: 0.8476623 3 1
# 2: 0.4787768 2 2
# 3: 0.3570803 1 3

তবে এর জন্য পুরো ডেটাসেটটি আবার অনুলিপি করা দরকার। এই কাজ করার জন্য অন্য উপায় আছে কি?

উত্তর:


182

ব্যবহার setcolorder():

library(data.table)
x <- data.table(a = 1:3, b = 3:1, c = runif(3))
x
#      a b         c
# [1,] 1 3 0.2880365
# [2,] 2 2 0.7785115
# [3,] 3 1 0.3297416
setcolorder(x, c("c", "b", "a"))
x
#              c b a
# [1,] 0.2880365 3 1
# [2,] 0.7785115 2 2
# [3,] 0.3297416 1 3

থেকে ?setcolorder:

ইন data.tableবাচনে, সমস্ত set*ফাংশন রেফারেন্স দ্বারা তাদের ইনপুট পরিবর্তন করুন। এটি হ'ল অস্থায়ী ওয়ার্কিং মেমরি ছাড়া অন্য কোনও অনুলিপি তৈরি হয় না, যা একটি কলামের মতোই বড়।

সুতরাং বেশ দক্ষ হতে হবে। দেখুন ?setcolorderবিস্তারিত জানার জন্য।


21
ছোট স্পষ্টকরণ: setcolorderকোনও কার্যকরী মেমরি মোটেই ব্যবহার না করে কলাম পয়েন্টারগুলি প্রায় ঘুরিয়ে দেয়। এক কলাম হিসাবে বৃহত্তর মেমরি ব্যবহার সম্পর্কে এই বাক্যটি প্রায় setkeyসত্যই really
ম্যাট ডাউল

2
@ ম্যাথেজডওলে - স্পষ্টির জন্য ধন্যবাদ। আমি ভাবলাম বাছাই যে ঘটনাটি হতে পারে, কিন্তু 100% নিশ্চিত ছিল না।
চেজ

3
আমি কি কলামগুলির একটি উপসেটের জন্য এটি করতে পারি? উদাহরণস্বরূপ, যখন আমি কেবল সামনে কলামগুলিতে যেতে চাই?
পিটার প্যান

5
setcolorder(df, c("someCol",colnames(dt)[!(colnames(dt) %in% c("someCol"))]))
হেজেডএন্ডলিভার্ড

6
@ পিটারপান এই ডিভেল সংস্করণ ১.১০.৫ সম্পর্কে নিউজও দেখুন : " setcolorder()এখন ncol(DT)কলামগুলি সামনের দিকে সরিয়ে নিতে কম গ্রহণ করে"
হেনরিক

12

উপরের সমাধানটি ব্যবহার করা একটিকে সহজ বলে মনে হতে পারে তবে কলাম নম্বর অনুসারে বাছাই করা যেতে পারে। উদাহরণস্বরূপ: গ্রন্থাগার (ডেটা টেবিল)

    > x <- data.table(a = 1:3, b = 3:1, c = runif(3))
    > x
         a b         c
    [1,] 1 3 0.2880365
    [2,] 2 2 0.7785115
    [3,] 3 1 0.3297416
    > setcolorder(x, c(3,2,1))
    > x
         c         b a
    [1,] 0.2880365 3 1
    [2,] 0.7785115 2 2
    [3,] 0.3297416 1 3

13
এটি সাধারণত.ডেটেবল এবং অন্য কোথাও সংখ্যা দ্বারা কলামগুলি উল্লেখ করতে নিরুৎসাহিত করা হয়। ডেটা.টিবেল এফএকিউ এটির জন্য এখানে প্রথম আইটেমটিতে যুক্তি দেয়: ডেটাটেবল.আর-forge.r-project.org/datatable-faq.pdf
ফ্রাঙ্ক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.