Вы можете использовать strsplit
и setdiff
, я добавил дополнительный крайний случай к вашим образцам данных:
a<-c("hour","four","ruoh", "six", "high", "our","oouh")
a[nchar(a) == 4 &
lengths(lapply(strsplit(a,""),function(x) setdiff(x, c("o","u","h")))) == 1]
# [1] "hour" "ruoh"
или grepl
:
a[nchar(a) == 4 & !rowSums(sapply(c("o","u","h"), Negate(grepl), a))]
# [1] "hour" "ruoh" "oouh"
sapply(c("o","u","h"), Negate(grepl), a)
дает вам матрицу, в которой слово не содержит каждую букву, тогда rowSums
действует как any
, примененное к строке, так как оно будет приведено к логическому.