Строка R, содержащая только один тип символов

Я хотел бы проверить, содержит ли строка только один тип символов

Например

INPUT: 

str = "AAAAB"
char = "A"

OUTPUT:

str contains only char = FALSE

С grepl(char,str) результат ИСТИНА, но я хочу, чтобы он был ЛОЖЬ.

Большое спасибо


person user3910073    schedule 06.08.2014    source источник
comment
Вам может понадобиться какая-то особая логика, если ваш str равен "". Например, решение m0nhawk выведет TRUE в данном случае (!grepl("[^A]", "")), что может быть или не быть тем, что вам нужно.   -  person Stephan Kolassa    schedule 06.08.2014


Ответы (5)


Вам нужно использовать оператор not для регулярного выражения, в вашем случае это будет:

> !grepl("[^A]", "AAA")
[1] TRUE
> !grepl("[^A]", "AAAB")
[1] FALSE

С переменными:

grepl(paste0("[^", char, "]"), srt)
person m0nhawk    schedule 06.08.2014

Если вы хотите проверить определенный символ (в char):

str <- "AAAAB"
char = "A"
all(unlist(strsplit(str, "")) == char)
#[1] FALSE

str <- "AAAA"
char = "A"
all(unlist(strsplit(str, "")) == char)
#[1] TRUE

Или, если вы хотите проверить, содержит ли строка только один уникальный символ (любой):

str <- "AAAAB"
length(unique(unlist(strsplit(str, "")))) == 1
#[1] FALSE

str = "AAAA"
length(unique(unlist(strsplit(str, "")))) == 1
#[1] TRUE
person talat    schedule 06.08.2014

Другой вариант — использовать charToRaw и проверить его уникальность:

xx <- "AAAAB"
length(unique(charToRaw(xx))) ==1
[1] FALSE
person agstudy    schedule 06.08.2014
comment
Это не принимает счет char = "A" в качестве входных данных - person David Arenburg; 06.08.2014

Вы можете использовать stri_count из пакета "stringi", например:

library(stringi)
stri_count_fixed(str, char) == nchar(str)
# [1] FALSE
person A5C1D2H2I1M1N2O1R2T1    schedule 06.08.2014

Использование gregexpr

char = "A"

str = "AAAA"
length(unlist(gregexpr(char, str))) == nchar(str)
## [1] TRUE

str = "ABAAA"
length(unlist(gregexpr(char, str))) == nchar(str)
## [1] FALSE
person David Arenburg    schedule 06.08.2014