проблемы с подсчетом гласных, проверка начинается с или заканчивается гласной в словах - PullRequest
0 голосов
/ 13 июня 2018

Рассмотрим приведенный ниже код для подсчета вхождения буквы «а» в каждом из слов:

data <- data.frame(number=1:4, string=c("this.is.a.great.word", "Education", "Earth.Is.Round", "Pinky), stringsAsFactors = F)

library(stringr)

data$Count_of_a <- str_count(data$string, "a")

data

Что приведет к чему-то вроде этого:

  number               string Count_of_a
1      1 this.is.a.great.word          2
2      2            Education          1
3      3       Earth.Is.Round          1
4      4       Pinky                   0

Я былпытаясь сделать еще пару вещей:

  1. вычислить общее количество гласных в каждом слове
  2. total no.букв в каждом слове
  3. независимо от того, начинается ли слово с гласной, затем 1 или 0
  4. , заканчивается ли слово гласной, а затем еще 1 0

Проблема в том, что если я использую nchar (data $ string), он также считает точки '.'Также я не смог найти большую помощь по вышеуказанным 4 требованиям.

окончательные данные я хотел выглядеть так:

number    string                 starts_with_vowel   ends_with_vowel   TotalLtrs
1         this.is.a.great.word          0                 0             16
2         Education                     1                 0             9
3         Earth.Is.Round                1                 0             12
4         Pinky                         0                 1             5

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Вам нужна комбинация выражений регулярных выражений

library(tidyverse)
data %>%
  mutate(
    nvowels = str_count(tolower(string), "[aeoiu]"),
    total_letters = str_count(tolower(string), "\\w"),
    starts_with_vowel = grepl("^[aeiou]", tolower(string)),
    ends_with_vowel = grepl("[aeiou]$", tolower(string))
  )


# number               string nvowels total_letters starts_with_vowel ends_with_vowel
# 1      1 this.is.a.great.word       6            16             FALSE           FALSE
# 2      2            Education       5             9              TRUE           FALSE
# 3      3       Earth.Is.Round       5            12              TRUE           FALSE
# 4      4                Pinky       1             5             FALSE           FALSE

Если вы считаете y гласным, добавьте его вот так

nvowels = str_count(tolower(string), "[aeoiuy]")
starts_with_vowel = grepl("^[aeiouy]", tolower(string))
ends_with_vowel = grepl("[aeiouy]$", tolower(string))
0 голосов
/ 13 июня 2018
library(stringr)
str_count(df$string, "a|e|i|o|u|A|E|I|O|U")
[1] 6 5 5 1

str_count(df$string, paste0(c(letters,LETTERS), collapse = "|"))
[1] 16  9 12  5

ifelse(substr(df$string, 1, 1) %in% c("a", "e", "i", "o", "u", "A", "E", "I", "O", "U"), 1, 0)
[1] 0 1 1 0

ifelse(substr(df$string, nchar(df$string), nchar(df$string)) %in% c("a", "e", "i", "o", "u", "A", "E", "I", "O", "U"), 1, 0)
[1] 0 0 0 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...