मेरे पास टेक्स्ट कैरेक्टर का एक वेक्टर है, महीने कहें।नाम:

> month.name
 [1] "January"   "February"  "March"     "April"     "May"       "June"      "July"     
 [8] "August"    "September" "October"   "November"  "December" 

"बेर" की स्थिति को खोजने के लिए मुझे किस आर फ़ंक्शन का उपयोग करना चाहिए जैसे कि यह सी (-1,-1,-1,-1,-1,-1,-1,-1 के रूप में एक संख्यात्मक वेक्टर देता है) ,7,5,6,6), यानी, बिना किसी मैच के -1 और पांचवें चरित्र के लिए 5?

r
1
oushaosong 25 सितंबर 2020, 03:26

2 जवाब

सबसे बढ़िया उत्तर

यह ?regexpr (कुछ अन्य सहायक विशेषताओं के साथ) का सटीक आउटपुट है:

regexpr("ber", month.name)
# [1] -1 -1 -1 -1 -1 -1 -1 -1  7  5  6  6
#attr(,"match.length")
# [1] -1 -1 -1 -1 -1 -1 -1 -1  3  3  3  3
#attr(,"index.type")
#[1] "chars"
#attr(,"useBytes")
#[1] TRUE
1
thelatemail 25 सितंबर 2020, 03:55

आप stringr::str_locate का उपयोग कर सकते हैं। यह एक मैट्रिक्स देता है:

library(stringr)
str_locate(month.name, "ber")

      start end
 [1,]    NA  NA
 [2,]    NA  NA
 [3,]    NA  NA
 [4,]    NA  NA
 [5,]    NA  NA
 [6,]    NA  NA
 [7,]    NA  NA
 [8,]    NA  NA
 [9,]     7   9
[10,]     5   7
[11,]     6   8
[12,]     6   8

तो str_locate(month.name, "ber")[, 'start'] एक सदिश लौटाता है:

 [1] NA NA NA NA NA NA NA NA  7  5  6  6

व्यक्तिगत रूप से मुझे लगता है कि एनए -1 से "कोई मैच नहीं" के लिए बेहतर विकल्प है। यदि आप वास्तव में ऐसा करना चाहते हैं तो आप हमेशा -1 बाद में स्थानापन्न कर सकते हैं। उदाहरण के लिए:

pos <- str_locate(month.name, "ber")[, 'start']
ifelse(is.na(pos), -1, pos)

 [1] -1 -1 -1 -1 -1 -1 -1 -1  7  5  6  6
1
neilfws 25 सितंबर 2020, 03:42