当前位置: 首页 > 知识库问答 >
问题:

计算元音的问题,检查单词中是否以元音开头或结尾

龙俊良
2023-03-14

考虑以下代码来计算每个单词中字母“a”的出现次数:

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. 合计编号每个单词中的字母数
  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个答案

狄玮
2023-03-14
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
百里杰
2023-03-14

你想要一个正则表达式的组合

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))
 类似资料:
  • 问题内容: 我想从表中查询具有元音作为其第一个和最后一个字符的名称列表。结果不能包含重复项。 为此,我编写了一个查询,该查询具有25个条件,每个元音每个其他元音,这非常笨拙。有更好的方法吗? 问题答案: 您可以使用正则表达式:

  • 我需要找到一个单词中元音的计数。然而,当我比较单词中的字母是否是元音时, 举个例子,我做的就像下面这个, ……)//其余部分被省略 语句变得太长。有没有办法将它们与正则表达式或类似正则表达式的比较进行比较,并给我字符串中元音出现的次数?

  • 问题内容: 从STATION查询不以元音开头或不以元音结尾的CITY名称列表。您的结果不能包含重复项。 我写下面的查询,但工作正常。有什么建议吗? 问题答案: 假设您正在使用MySQL,这就是您要寻找的东西 Footnote : RLIKE and DISTINCT

  • 给定一个句子,我希望能够数出每个单词中有多少个元音。 示例输入: 示例输出: 我最初的想法是有2个同时循环。第一个循环直到满足EOF以结束程序,第二个(嵌套的)同时循环将运行直到满足空格 (" ") ,同时还对当前单词中的元音求和。一旦遇到空格,它将打印出元音的当前值,第二个同时循环将结束并重新开始(元音计数器重置回0)。 这是我为此编写的代码: 然而,这导致语法错误,我不能找出我的错误。 第6行

  • 问题内容: 我需要检查单词中是否存在元音。如果是这样,应对“说”一词进行操作。我想避免for循环,因为我想到了这一点: 请推荐一种执行时间成本较低的方法。另外,也请帮助我纠正上述方法。 问题答案: vowels = {“a”, “e”, “i”, “o”, “u”, “A”, “E”, “I”, “O”, “U”} if any(char in vowels for char in word):

  • 问题内容: 我正在尝试从STATION查询不以元音开头且不以元音结尾的CITY名称列表。结果不能包含重复项。 一开始我尝试了这个: 但是我没有得到正确的答案,因此没有进行搜索并编写以下代码,但该代码也没有给出正确的答案: 我希望只显示那些以元音开头和结尾的城市名称,但在第一个查询中将显示所有城市名称,而在第二个查询中,将不显示以元音开头的所有城市名称。 问题答案: 更容易阅读的是: 请注意第二个子