2013-10-05 10 views
6

मेरे पास आईडी कॉलम के साथ डेटा फ्रेम और मानों के लिए कुछ कॉलम हैं। मैं केवल उस पंक्ति पर आईडी के मान को मानने के आधार पर डेटा फ्रेम की कुछ पंक्तियों को रखना चाहता हूं, उदाहरण के लिए, "रखें" कहा जाता है)।मूल्यों के सेट के आधार पर डेटा फ्रेम की केवल कुछ पंक्तियों को ध्यान में रखते हुए

df <- data.frame(ID = sample(rep(letters, each=3)), value = rnorm(n=26*3)) 
keep <- c("a", "d", "r", "x") 

मैं पंक्तियों केवल आईडी रखने के मिलान में है से मिलकर एक नया डेटा फ्रेम कैसे बना सकते हैं:

सादगी के लिए, यहाँ एक उदाहरण है? मैं इसे which() फ़ंक्शन का उपयोग करके केवल एक अक्षर के लिए कर सकता हूं, लेकिन एकाधिक अक्षरों के साथ मुझे चेतावनी संदेश और गलत रिटर्न मिलते हैं। मुझे पता है कि मैं डेटा फ्रेम के माध्यम से लूप के लिए एक रन चला सकता हूं और इस तरह से बाहर निकल सकता हूं, लेकिन मुझे आश्चर्य है कि इस बारे में जाने का एक और अधिक सुरुचिपूर्ण और कुशल तरीका है या नहीं। अग्रिम में धन्यवाद।

+3

डीएफ [डीएफ $ आईडी%% रखो,] या सबसेट (डीएफ, आईडी%% में रखें) का प्रयास करें - http://stat.ethz.ch/R-manual/R-devel/library/base देखें /html/sets.html – Adrian

+1

@Adrian => उत्तर ... –

उत्तर

17

df[df$ID %in% keep, ] या subset(df, ID %in% keep) आज़माएं - sets के लिए सहायता पृष्ठ देखें।

संपादित करें: इसके अलावा, अगर यह एक ही पत्र के लिए था, तो आप लिख सकते हैं उदा। which() का उपयोग करने के बजाय df[df$ID == "a", ]

+0

बिल्कुल सही, बहुत बहुत धन्यवाद! मुझे सिर्फ एक पत्र निकालने की दूसरी विधि के बारे में पता है, लेकिन मैं आर के साथ अपने पूरे इतिहास में 'कौन()' विधि का उपयोग कर रहा हूं और यह मेरे लिए वाक्य रचनात्मक रूप से सुंदर दिखता है (अगर यह कोई समझ में आता है ....) तो मैं इसके साथ बने रहें :) – user2849910

संबंधित मुद्दे

 संबंधित मुद्दे