ডেটাতে একাধিক কলাম নির্বাচন করুন their তাদের সংখ্যা সূচকগুলি অনুসারে সক্ষম


143

কীভাবে আমরা তাদের সংখ্যার সূচকগুলিতে (অবস্থান) ভেক্টর ব্যবহার করে একাধিক কলাম নির্বাচন করতে পারি data.table?

এটি আমরা কীভাবে করব data.frame:

df <- data.frame(a = 1, b = 2, c = 3)
df[ , 2:3]
#   b c
# 1 2 3

উত্তর:


185

ডেটা টেবিলের সংস্করণগুলির জন্য >= 1.9.8, নিম্নলিখিতটি কেবলমাত্র কাজ করে:

library(data.table)
dt <- data.table(a = 1, b = 2, c = 3)

# select single column by index
dt[, 2]
#    b
# 1: 2

# select multiple columns by index
dt[, 2:3]
#    b c
# 1: 2 3

# select single column by name
dt[, "a"]
#    a
# 1: 1

# select multiple columns by name
dt[, c("a", "b")]
#    a b
# 1: 1 2

ডেটা.টিবেলের সংস্করণগুলির জন্য < 1.9.8(যার জন্য সংখ্যাসূচক কলাম নির্বাচন ব্যবহারের প্রয়োজন ছিল with = FALSE), এই উত্তরের এই পূর্ববর্তী সংস্করণটি দেখুন । এছাড়াও v1.9.8 এ নিউজ দেখুন , সম্ভাব্য দুটি পরিবর্তন, পয়েন্ট 3।


1
সমস্যা নেই. এছাড়াও তুলনা dt[,"a"]এবং dt[,"a", with=FALSE]তা দেখতে একটি সহায়ক বিকল্প এটা সত্যিই হয়।
জোশ ও ব্রায়েন

3
কোন উপায় ছাড়াই এটি করা? উদাহরণস্বরূপ DT[,list(b:c), আমি যেমন উপাত্ত টেবিলের মধ্যে কলামগুলি সরাসরি রূপান্তর করা সুবিধাজনক বলে মনে করেছি, যেমন আমি করতে পারি DT[,list(1/b,2*c)]তবে এটি দিয়ে কাজ করে না।
জাম্বোরটা

2
প্যাকেজ পরিবর্তন with=FALSEএই ক্ষেত্রে অপ্রয়োজনীয় করে তুলবে
ফ্রাঙ্ক

1
@ ফ্র্যাঙ্ক - এটি দুর্দান্ত খবর! আমার মনোযোগ এটি আনয়ন করার জন্য ধন্যবাদ। একবার সেই পরিবর্তনটি সিআরএএন-এ বিতরণ করা ডেটা সংস্করণে প্রবেশ করতে সক্ষম হয়ে যায় , আমি এই উত্তরটি সম্পাদনা করব শীর্ষে পরিবর্তনটি ঘোষণা করার জন্য। (এবং দয়া করে - আপনি বা অন্য যে কেউ এটি পড়েন - তা ঘটে তাড়াতাড়ি আমাকে একটি অনুস্মারক দিয়ে বেঁধে নির্দ্বিধায় অনুভব করুন))
জোশ

2
@ ভ্যালেন্টাস ফানি আপনার জিজ্ঞাসা করা উচিত। data.frameব্যবহারের উপযুক্ত কোনও উপায় নেই with=FALSE। যাইহোক, 3 সম্পর্কে সপ্তাহ আগে থেকে, উন্নয়ন সংস্করণ data.table মত কল পরিবর্তন করা হয়েছে dt[, 2], dt[, 2:3], dt[, "b"], এবং dt[, c("b", "c")]একই আচরণ হিসাবে তারা সঙ্গে না data.frameগুলি ছাড়া স্পষ্টভাবে সেট করতে থাকার with=FALSE। ভয়াবহ! নিউজ এন্ট্রি সহ পরিবর্তনের বর্ণনা সহ নির্দিষ্ট প্রতিশ্রুতিবদ্ধতার জন্য এখানে দেখুন
জোশ ওব্রায়েন

43

এটি কিছুটা ভার্বোজ, তবে আমি লুকানো .SDভেরিয়েবল ব্যবহার করতে অভ্যস্ত হয়ে পড়েছি।

b<-data.table(a=1,b=2,c=3,d=4)
b[,.SD,.SDcols=c(1:2)]

এটি একটি ঝামেলা কিছুটা হলেও আপনি অন্যান্য ডেটা.ট্যাবল বৈশিষ্ট্যগুলি (আমার মনে হয় না) হারাবেন না, সুতরাং আপনার এখনও অন্য গুরুত্বপূর্ণ ফাংশনগুলি যেমন জোড় টেবিল ইত্যাদি ব্যবহার করতে সক্ষম হওয়া উচিত should


6
প্রোগ্রামালিকভাবে কলাম তালিকা তৈরি করার সময় কোনও ঝামেলা নয় এবং খুব কার্যকর
ক্রিস

39

আপনি কলাম ব্যবহার করতে চান তাহলে নাম কলাম নির্বাচন করতে, সহজভাবে ব্যবহার .(), যার জন্য উপনাম হল list():

library(data.table)
dt <- data.table(a = 1:2, b = 2:3, c = 3:4)
dt[ , .(b, c)] # select the columns b and c
# Result:
#    b c
# 1: 2 3
# 2: 3 4

19

V1.10.2 থেকে, আপনি ব্যবহার করতে পারেন ..

dt <- data.table(a=1:2, b=2:3, c=3:4)

keep_cols = c("a", "c")

dt[, ..keep_cols]

3
এই উত্তরের জন্য ধন্যবাদ। আমি এটিও খুঁজে পেয়েছি dt[, !..keep_cols]এবং dt[, -..keep_cols] প্রত্যাশার মতো কাজ করে!
আইসক্রিমটাউকান

3

@ টম, এই সমাধানটি দেখানোর জন্য আপনাকে অনেক ধন্যবাদ। এটি আমার জন্য খুব ভালো কাজ করছে।

আমি কেবল একটি কলাম মুদ্রণ থেকে এবং উপরের উদাহরণ থেকে বাদ দেওয়ার উপায় খুঁজছিলাম। দ্বিতীয় কলামটি বাদ দিতে আপনি এরকম কিছু করতে পারেন

library(data.table)
dt <- data.table(a=1:2, b=2:3, c=3:4)
dt[,.SD,.SDcols=-2]
dt[,.SD,.SDcols=c(1,3)]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.