2012-04-23 11 views
67

मैं नाम के साथ एक data.frame है खोजने के लिए "abcframe"एक स्तंभ या डेटा फ्रेम में मौजूद है या नहीं नहीं

 a b c 
    1 1 1 
    2 2 3 

मैं मिल सकती है कैसे एक स्तंभ मौजूद है या किसी दिए गए डेटा फ्रेम में नहीं? उदाहरण के लिए, मैं यह जानना चाहता हूं कि कॉलम डी डेटा.फ्रेम abcframe में मौजूद है या नहीं।

+0

आप अपने डेटा फ्रेम 'd' के नाम के साथ एक स्तंभ है कि क्या जानना चाहते हैं, या क्या आप जानना चाहते हैं कि दिया गया वेक्टर 'डी' आपके डेटा फ्रेम के कॉलम में से एक के बराबर है या नहीं? –

+0

मैं जानना चाहता हूं कि डेटाफ्रेम में नाम डी के साथ क्लॉम है या –

उत्तर

115

यह मानते हुए कि आपके डेटा फ्रेम के नाम dat है और वह जांच करने के लिए अपने स्तंभ नाम "d" है, तो आप %in% ऑपरेटर का उपयोग कर सकते हैं:

if("d" %in% colnames(dat)) 
{ 
    cat("Yep, it's in there!\n"); 
} 
+1

धन्यवाद, आपने मेरी समस्या हल की है। –

+2

अब आदमी अब सुबह है! (दूसरे शब्दों में, धन्यवाद!) –

+2

यदि आप उलटा दिख रहे हैं, यानी यदि कॉलम नहीं है, तो शुरुआत में '!' जोड़ें: 'if (!" d "%% colnames (डेटा) में%)' –

19

आप %in% और grepl का उपयोग कर सहित विकल्पों में से एक नंबर, है :

dat <- data.frame(a=1:2, b=2:3, c=4:5) 
dat 
    a b c 
1 1 2 4 
2 2 3 5 

कॉलम के नाम पाने के लिए:

names(dat) 
[1] "a" "b" "c" 

सदस्यता के लिए जाँच करने के लिए उपयोग %in%:

"d" %in% names(dat) 
[1] FALSE 

Or use `grepl` to check for a match: 

grepl("d", names(dat)) 
[1] FALSE FALSE FALSE 
+10

'grepl' थोड़ा और सटीक प्राप्त करने के लिए, आप 'grepl ("^d $ ", नामों का उपयोग कर सकते हैं (डेटा)) ', यह सुनिश्चित करने के लिए कि नाम' डीडी' वाला कॉलम 'TRUE' वापस नहीं लौटाता है। – BenBarnes

+0

इसके लिए धन्यवाद, 'उपनाम' मेरे लिए काम नहीं किया लेकिन 'नाम 'किया। – Docconcoct

0

आप इस्तेमाल कर सकते हैं any:

> names(dat) 
[1] "a" "b" "c" 
> any(names(dat) == 'b') 
[1] TRUE 
> any(names(dat) == 'B') 
[1] FALSE 
संबंधित मुद्दे