Как подсчитать уникальные значения в строках данных

#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]