ডেটা ফ্রেম থেকে নির্দিষ্ট কলামগুলি বের করা


364

আমার কাছে 6 টি কলাম সহ একটি আর ডেটা ফ্রেম রয়েছে এবং আমি একটি নতুন ডেটাফ্রেম তৈরি করতে চাই যেখানে কেবলমাত্র তিনটি কলাম রয়েছে।

আমার ডেটা ফ্রেম ধরে নেওয়া যাক হয় df, এবং আমি নির্যাস কলাম করতে চান A, Bএবং E, এই শুধুমাত্র আদেশ আমি জিনিসটা নিয়েছি:

 data.frame(df$A,df$B,df$E)

এটি করার আরও কমপ্যাক্ট উপায় আছে?

উত্তর:


156

Dplyr প্যাকেজ ব্যবহার করে যদি আপনার ডেটা.ফ্রেমকে বলা হয় df1:

library(dplyr)

df1 %>%
  select(A, B, E)

এটি %>%পাইপ ছাড়াই লিখিত হতে পারে :

select(df1, A, B, E)

2
আমার প্রশ্ন পোস্ট করার পরে টিডিয়ের্সের যথেষ্ট বিবর্তন দেওয়া, আমি আপনার উত্তরটি পরিবর্তন করেছি।
আরেন কাম্ব্রে

4
পরিপাটি পরিবর্তনের উগ্র হারের পরিপ্রেক্ষিতে, আমি এই প্যাটার্নটি ব্যবহার করা সম্পর্কে সতর্কতা অবলম্বন করব। এটি কলামের নামগুলি চিকিত্সা করার বিরুদ্ধে আমার দৃ strong় পছন্দ ছাড়াও যেমন ফাংশন, প্যাকেজগুলি বা অ্যাপ্লিকেশনগুলির জন্য কোড লেখার সময় তারা বস্তুর নাম।
জোশুয়া আলরিখ

1
এই উত্তরটি জমা দেওয়ার চার বছর পেরিয়ে গেছে এবং প্যাটার্নটি পরিবর্তন হয়নি। পাইপযুক্ত ভাবগুলি বেশ স্বজ্ঞাত হতে পারে, এজন্যই তারা আবেদন করছে ing
আরেন কাম্ব্রে

আমি কীভাবে এই সাবসেটের উপর আরও কমান্ড কার্যকর করব? উদাহরণস্বরূপ, আমি সারিটি গণনা করতে চাই: "df1%>% rowMeans (নির্বাচন করুন (এ, বি, ই))" কাজ করে না।
বেন

আপনি শৃঙ্খল একসঙ্গে মত একটি পাইপলাইন চাই: df1 %>% select(A, B, E) %>% rowMeans(.)%>%পাইপের জন্য ডকুমেন্টেশন টাইপ করে দেখুন?magrittr::`%>%`
স্যাম ফির্ক

448

আপনি কলামের নামের ভেক্টর ব্যবহার করে সাবসেট করতে পারেন। কলামের নামগুলি এমন আচরণের ক্ষেত্রে আমি দৃ over়তার সাথে অগ্রাধিকার দিচ্ছি যেন তারা কলামের নাম (যেমন subset()), বিশেষত ফাংশন, প্যাকেজ বা অ্যাপ্লিকেশনগুলিতে প্রোগ্রামিং করার সময়।

# data for reproducible example
# (and to avoid confusion from trying to subset `stats::df`)
df <- setNames(data.frame(as.list(1:5)), LETTERS[1:5])
# subset
df[,c("A","B","E")]

4
এটি ত্রুটি দেয় object of type 'closure' is not subsettable
আরেন কাম্ব্রে

24
@ আরেনকাম্ব্রে: তারপরে আপনার ডেটা.ফ্রেমের নামকরণ করা হয়নি dfdfএছাড়াও পরিসংখ্যান প্যাকেজ একটি ফাংশন।
জোশুয়া উলরিচ


2
@ সিনা: কারণ -"A"এটি একটি সিনট্যাক্স ত্রুটি। আর ?Extractবলে, " i, j, ...নেতিবাচক পূর্ণসংখ্যার নির্দেশ উপাদান / টুকরা নির্বাচনের ছেড়ে হতে পারে।"
জোশুয়া উলরিচ

7
এই সিনট্যাক্স নিয়ে একটি সমস্যা কারন যদি আমরা কেবল একটি কলাম আর নিষ্কর্ষ, একটি dataframe একটি ভেক্টর ফেরৎ পরিবর্তে এবং এই অবাঞ্ছিত হতে পারে হল: > df[,c("A")] [1] 1। ব্যবহারের subsetএই অসুবিধা নেই।
ডেভিড ডর্চিস

100

এটি subset()ফাংশনের ভূমিকা :

> dat <- data.frame(A=c(1,2),B=c(3,4),C=c(5,6),D=c(7,7),E=c(8,8),F=c(9,9)) 
> subset(dat, select=c("A", "B"))
  A B
1 1 3
2 2 4

আমি যখন এটি চেষ্টা করি, আমার ডেটা সহ, আমি ত্রুটিটি পেয়েছি: "এক্স [জে] তে ত্রুটি: অবৈধ সাবস্ক্রিপ্ট টাইপ 'তালিকা'" তবে সি ("এ", "বি") যদি কোনও তালিকা না হয় তবে তা কী? ?
রাফায়েল_স্পেরিকুয়েতা

@ রাফায়েল_এস্পেরিকুয়েটা আপনার কোড না দেখে অনুমান করা শক্ত ... তবে c("A", "B")এটি ভেক্টর, তালিকা নয়।
স্টাফেন লরেন্ট

এটি ডাটা ফ্রেমকে তালিকায় রূপান্তর করে।
স্যাত আতান পিএইচডি

78

দুটি সুস্পষ্ট পছন্দ রয়েছে: জোশুয়া উলরিচের df[,c("A","B","E")]বা

df[,c(1,2,5)]

হিসাবে হিসাবে

> df <- data.frame(A=c(1,2),B=c(3,4),C=c(5,6),D=c(7,7),E=c(8,8),F=c(9,9)) 
> df
  A B C D E F
1 1 3 5 7 8 9
2 2 4 6 7 8 9
> df[,c(1,2,5)]
  A B E
1 1 3 8
2 2 4 8
> df[,c("A","B","E")]
  A B E
1 1 3 8
2 2 4 8

16

শুধুমাত্র কিছু কারণে

df[, (names(df) %in% c("A","B","E"))]

আমার জন্য কাজ। উপরের সমস্ত সিনট্যাক্সে "অপরিবর্তিত কলামগুলি নির্বাচিত" পাওয়া গেছে।


15

যেখানে df1 হল আপনার মূল ডেটা ফ্রেম:

df2 <- subset(df1, select = c(1, 2, 5))

7
এটি ব্যবহার করে না dplyr। এটি ব্যবহার করে base::subset, এবং অভিন্ন স্টিফেন Laurent এর উত্তর ব্যতীত আপনি কলাম নামে পরিবর্তে কলাম সংখ্যা ব্যবহার করুন।
গ্রেগর থমাস

14

আপনি আর sqldfপ্যাকেজটি ব্যবহার করতে পারেন যা আর ডেটা ফ্রেমে নির্বাচন করে:

df1 <- sqldf("select A, B, E from df")

এটি আউটপুট হিসাবে df1কলাম সহ একটি ডেটা ফ্রেম দেয় : A, B, E।



1
df<- dplyr::select ( df,A,B,C)

এছাড়াও, আপনি নতুন তৈরি ডেটাতে একটি আলাদা নাম নির্ধারণ করতে পারেন

data<- dplyr::select ( df,A,B,C)

0

[ এবং সাবসেটটি পরিবর্তনযোগ্য নয়:

[ যদি কেবল একটি কলাম নির্বাচন করা হয় তবে কোনও ভেক্টরকে ফিরিয়ে দেয়।

df = data.frame(a="a",b="b")    

identical(
  df[,c("a")], 
  subset(df,select="a")
) 

identical(
  df[,c("a","b")],  
  subset(df,select=c("a","b"))
)

4
আপনি যদি সেট না drop=FALSE। উদাহরণ:df[,c("a"),drop=F]
untill
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.