2012-10-25 8 views
11

मैं इस तरह डेटा फ्रेम है:डेटा फ्रेम में स्तंभ मान के रूप में स्ट्रिंग के सूचकांक खोजें

df <- data.frame(col1 = c(letters[1:4],"a"),col2 = 1:5,col3 = letters[10:14]) 
df 
    col1 col2 col3 
1 a 1 j 
2 b 2 k 
3 c 3 l 
4 d 4 m 
5 a 5 n 

मैं df के स्तंभ स्ट्रिंग के लिए मूल्यों मिलान है के सूचकांक लगाना चाहते हैं " ए"। यानी मुझे परिणाम के रूप में 1 देना चाहिए। मैंने कोशिश की कि कौन सा उपयोग में है लेकिन यह काम नहीं कर रहा है। कोई भी जानता है कि बिना लूप के इसे कैसे किया जाए ??

उत्तर

13

ऐसा कुछ?

which(apply(df, 2, function(x) any(grepl("a", x)))) 

कदम हैं:

  1. प्रत्येक स्तंभ के ऊपर apply जाने के साथ
  2. खोजें यदि agrepl
  3. जब से हम एक सदिश वापस पाने के साथ इस कॉलम में है, any का उपयोग TRUE पाने के लिए यदि कोई तत्व a
  4. से मेल खाता है तो अंत मेंदेखेंतत्व (कॉलम) TRUE हैं (यानी। खोज पत्र a) शामिल है।
+0

बहुत बहुत धन्यवाद @ jmsigner। – user1021713

3

जब से तुम उल्लेख आप sapply() उपयोग करने के लिए कोशिश कर रहे थे लेकिन असफल रहे है, तो यहां आप यह कर सकते है:

> sapply(df, function(x) any(x == "a")) 
col1 col2 col3 
TRUE FALSE FALSE 
> which(sapply(df, function(x) any(x == "a"))) 
col1 
    1 
बेशक

, अगर आप स्ट्रिंग मिलान पसंद करते हैं आप भी grep()/grepl() दृष्टिकोण का उपयोग कर सकते हैं । यदि आप केवल कॉलम नंबर चाहते हैं तो आप अपने which() फ़ंक्शन को unname() से भी लपेट सकते हैं।

+0

इस समाधान के लिए भी बहुत कुछ धन्यवाद ... – user1021713

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