आर

2011-04-15 43 views
21

में एक सूची की केस-असंवेदनशील खोज क्या मैं एक स्ट्रिंग के लिए एक वर्ण सूची खोज सकता हूं जहां मुझे नहीं पता कि स्ट्रिंग कैसा है? या अधिक आम तौर पर, मैं डेटाफ्रेम में एक कॉलम को संदर्भित करने का प्रयास कर रहा हूं, लेकिन मुझे नहीं पता कि कॉलम कैसा रहे हैं। मेरा विचार कॉलम के उचित आवरण को वापस करने के लिए केस-असंवेदनशील तरीके से नाम (myDataFrame) खोजना था।आर

उत्तर

21

मान लिया जाये कि कोई चर नाम जो केवल मामले में भिन्न होते हैं देखते हैं कि, आप tolower(names(myDataFrame)) में अपने सभी-छोटे अक्षरों चर नाम खोज सकते हैं:

match("b", tolower(c("A","B","C"))) 
[1] 2 

यह केवल सटीक मेल का उत्पादन करेगा, लेकिन वह शायद इस में वांछनीय है मामला।

+0

खोजने योग्य पैकेज जो आपको केस-असंवेदनशील मिलान को चालू करने की अनुमति देता है। – ctbrown

27

मैं grep() फ़ंक्शन और उसके कुछ अतिरिक्त तर्कों का सुझाव दूंगा जो इसे उपयोग करने में खुशी देते हैं।

grep("stringofinterest",names(dataframeofinterest),ignore.case=TRUE,value=TRUE) 

तर्क value=TRUE बिना आप केवल सूचकांक पदों जहां मैच हुआ का एक वेक्टर मिल जाएगा।

1

searchable पैकेज वस्तुओं के भीतर खोज के विभिन्न प्रकार के लिए अनुमति देने के लिए बनाया गया था:

l <- list(a=1, b=2, c=3) 
sl <- searchable(l)  # make the list "searchable" 
sl <- ignore.case(sl)  # turn on case insensitivity 

> sl['B'] 
$b 
[1] 2 

यह सूची और वैक्टर के साथ काम करता है और एक बहुत सरल केस-संवेदी मिलान की तुलना में अधिक है।

0

आप तार का एक और सेट में तार का एक सेट के लिए खोज करने के लिए चाहते हैं, insensitively मामला है, आप की कोशिश कर सकते:

s1 = c("a", "b") 
s2 = c("B", "C") 
matches = s1[ toupper(s1) %in% toupper(s2) ] 
0

इस को प्राप्त करने का एक और तरीका है stringr पैकेज से str_which(string, pattern) उपयोग करने के लिए है:

library("stringr") 
str_which(string = tolower(colnames(iris)), pattern = "species")