2014-10-04 11 views
9

मैं एक तालिका की पंक्तियों को फ़िल्टर करना चाहता हूं जिसमें कॉलम के स्ट्रिंग मान में '*' है। बस उस कॉलम की जांच कर रहा है।कैसे निर्धारित करें कि एक स्ट्रिंग आर में दूसरी स्ट्रिंग के साथ "समाप्त होती है"?

string_name = c("aaaaa", "bbbbb", "ccccc", "dddd*", "eee*eee") 

zz <- sapply(tx$variant_full_name, function(x) {substrRight(x, -1) =="*"}) 
Error in FUN(c("Agno I30N", "VP2 E17Q", "VP2 I204*", "VP3 I85F", "VP1 K73R", : 
    could not find function "substrRight" 

ज़ेड का चौथा मूल्य इस से सत्य होना चाहिए।

पायथन में स्ट्रिंग्स के लिए endwith function है [string_s.endswith ('*')] क्या आर में ऐसा कुछ है?

इसके अलावा, क्या यह एक चरित्र के रूप में '*' की वजह से समस्या है क्योंकि इसका कोई मतलब है? grepl भी काम नहीं कर रहा है।

> grepl("*^",'dddd*') 
[1] TRUE 
> grepl("*^",'dddd') 
[1] TRUE 
+2

आप '*' 'grepl बच सकते हैं (" \\ * ", 'dddd *')'। '*' के साथ समाप्त होने वाले तारों को ढूंढने के लिए आप 'grepl ("\\ * $", string_name) का उपयोग कर सकते हैं। – jdharrison

उत्तर

8

* नियमित अभिव्यक्ति में एक quantifier है। यह नियमित अभिव्यक्ति इंजन को पिछले टोकन "शून्य या अधिक बार" से मिलान करने का प्रयास करने के लिए कहता है। एक शाब्दिक मिलान करने के लिए, आपको इसे दो बैकस्लाश के साथ या एक वर्ण वर्ग [*] के अंदर रखने की आवश्यकता है। यह जांचने के लिए कि स्ट्रिंग किसी विशिष्ट पैटर्न के साथ समाप्त होती है, end of string $anchor का उपयोग करें।

> grepl('\\*$', c('aaaaa', 'bbbbb', 'ccccc', 'dddd*', 'eee*eee')) 
# [1] FALSE FALSE FALSE TRUE FALSE 

आप बस आधार आर में एक रेगुलर एक्सप्रेशन को लागू करने के बिना यह कर सकते हैं:

> x <- c('aaaaa', 'bbbbb', 'ccccc', 'dddd*', 'eee*eee') 
> substr(x, nchar(x)-1+1, nchar(x)) == '*' 
# [1] FALSE FALSE FALSE TRUE FALSE 
8

यह काफी सरल है कि आप नियमित अभिव्यक्ति की आवश्यकता नहीं है।

> string_name = c("aaaaa", "bbbbb", "ccccc", "dddd*", "eee*eee") 
> substring(string_name, nchar(string_name)) == "*" 
[1] FALSE FALSE FALSE TRUE FALSE 
5

मैं कुछ इस तरह का उपयोग करें:

strEndsWith <- function(haystack, needle) 
{ 
    hl <- nchar(haystack) 
    nl <- nchar(needle) 
    if(nl>hl) 
    { 
    return(F) 
    } else 
    { 
    return(substr(haystack, hl-nl+1, hl) == needle) 
    } 
} 
संबंधित मुद्दे

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