#r #tidyverse
#r #tidyverse
Вопрос:
Я пытаюсь найти общие слова, имеющие 5 уникальных гласных (например: «aeiuo» без единого слова и без повторения)
Я попробовал это:
library(tidyverse)
x<-c("appropriate","associate","available","colleague","experience","encourage","encouragi","associetu")
x[str_count(x,"[aeiuo]")>4]
Обратите внимание, что слова («incredigi» и «associetu») использовались с целью проверки моего предполагаемого ответа
результаты, которые я генерирую, следующие:
[3] "available" "colleague"
[5] "experience" "encourage"
[7] "encouragi" "associetu"
Пока я хотел получить только:
"encouragi" "associetu"
которые удовлетворяют критериям наличия 5 различных гласных (например: «aeiuo»).
Есть ли какая-либо функция для использования в качестве string_count_unique?? если да, то какое? если нет, какую другую функцию вы могли бы порекомендовать мне использовать, чтобы я соответствовал установленным критериям?
заранее благодарим вас за помощь!
Ответ №1:
Одним из вариантов может быть:
x[lengths(lapply(str_extract_all(x, "a|e|i|u|o"), unique)) == 5]
[1] "encouragi" "associetu"
Ответ №2:
strsplit
Может быть, это поможет вам
> x[sapply(strsplit(x,""),function(v) sum(unique(v)%in%c("a","e","i","o","u"))>4) ]
[1] "encouragi" "associetu"
Ответ №3:
Вот способ сделать это с помощью strsplit
и setdiff
. Мы перебираем каждую строку, используя sapply
, мы разбиваем каждую строку на ее буквы, затем проверяем, присутствуют ли все гласные в векторе, полученном из strsplit
. Если длина setdiff
больше 0, в строке отсутствует одна или несколько гласных.
keep <- sapply(x, FUN = function(x){
length(setdiff(c("a", "e", "i", "o", "u"), el(strsplit(x, "")))) == 0
})
x[keep]
# [1] "encouragi" "associetu"
Ответ №4:
Проблема с вашим кодом заключается в том, что вы подсчитываете, равна ли сумма ЛЮБОГО из aeiou
>4
них. Что вы хотите, так это проверить, что количество a
равно >0
И что количество e
равно >0
и так далее. Итак, вы можете проверить следующее:
x[str_count(x,"[a]")>0 amp; str_count(x,"[e]")>0 amp; str_count(x,"[i]")>0 amp; str_count(x,"[o]")>0 amp; str_count(x,"[u]")>0]