2017-04-18 93 views
0

下面的函數從字符串中提取英文字母中的任何字母。從字符串中提取西里爾文字母

is.letter <- function(x) grepl("[:alpha:]", x) 

我想建立一個類似的函數,只從給定的字符串中提取單數字母。

更新:

與Wiktor的Stribiżew提供的代碼,我得到如下結果:

grepl("\\p{Cyrillic}", x, perl=TRUE) 

test[, c(2, 11)] 
     MOBILE_NUMBER contain_cyrlic 
    1 НЕМА ТЕЛЕФОН   FALSE 
    2  НЕПОЗНАТ   FALSE 
    3 НЕМА ТЕЛЕФОН   FALSE 
    4 НЕМА ТЕЛЕФОН   FALSE 

任何想法?

+1

嘗試'grepl(「\\ p {西里爾}「,x,perl = TRUE)'。 –

+0

嗯..它會爲所有條目返回false,即使是那些包含cyrlic字母的條目。它可能是編碼? – Prometheus

+0

您能否分享一些您測試的字符串(測試代碼)? –

回答

2

stringi可能提供更多的跨平臺/系統一致的結果對你但兩者stri_detect_regexgrepl(在 「perl」 的模式)應該做的伎倆:

library(stringi) 
library(dplyr) 

data_frame(
    MOBILE_NUMBER = c("НЕМА ТЕЛЕФОН", "НЕПОЗНАТ", "НЕМА ТЕЛЕФОН", "НЕМА ТЕЛЕФОН") 
) -> tst 

tst 
## # A tibble: 4 × 1 
## MOBILE_NUMBER 
##   <chr> 
## 1 НЕМА ТЕЛЕФОН 
## 2  НЕПОЗНАТ 
## 3 НЕМА ТЕЛЕФОН 
## 4 НЕМА ТЕЛЕФОН 

(t1 <- mutate(tst, is_cyrillic = grepl("\\p{Cyrillic}", MOBILE_NUMBER, perl=TRUE))) 
## # A tibble: 4 × 2 
## MOBILE_NUMBER is_cyrillic 
##   <chr>  <lgl> 
## 1 НЕМА ТЕЛЕФОН  TRUE 
## 2  НЕПОЗНАТ  TRUE 
## 3 НЕМА ТЕЛЕФОН  TRUE 
## 4 НЕМА ТЕЛЕФОН  TRUE 

(t2 <- mutate(tst, is_cyrillic = stri_detect_regex(MOBILE_NUMBER, "\\p{Cyrillic}"))) 

## # A tibble: 4 × 2 
## MOBILE_NUMBER is_cyrillic 
##   <chr>  <lgl> 
## 1 НЕМА ТЕЛЕФОН  TRUE 
## 2  НЕПОЗНАТ  TRUE 
## 3 НЕМА ТЕЛЕФОН  TRUE 
## 4 НЕМА ТЕЛЕФОН  TRUE 

identical(t1, t2) 
## [1] TRUE 
+0

該stri_detect_regex函數工作。但是,正如我前面提到的那樣,grepl會返回false。謝謝您的幫助! – Prometheus