R 在字符串向量上迭代单词并对单个单词应用更改

R 在字符串向量上迭代单词并对单个单词应用更改,r,string,list,apply,sapply,R,String,List,Apply,Sapply,给定字符串: words <- c("fauuucet water", "tap water") 作用 笔记 我特别感兴趣的是,是否可以构建使用单个调用的解决方案 这种方法也很有趣 选择包含u字符的单词就是一个例子,在实践中,我希望应用反映长度等的各种条件 以下是一个基于stringi的解决方案: library(stringi); sapply(stri_extract_all_words(words), function(w) paste(ifelse(stri_dete

给定字符串:

words <- c("fauuucet water", "tap water")
作用
笔记
  • 我特别感兴趣的是,是否可以构建使用单个调用的解决方案
  • 这种方法也很有趣
  • 选择包含u字符的单词就是一个例子,在实践中,我希望应用反映长度等的各种条件

    • 以下是一个基于stringi的解决方案:

      library(stringi);
      sapply(stri_extract_all_words(words),
          function(w) paste(ifelse(stri_detect(w, regex = "u"), toupper(w), w), collapse = " "))
      #[1] "FAUUUCET water" "tap water"
      

      您可以使用单个
      sapply
      调用,即

      sapply(strsplit(words, ' '), function(i) {i1 <- grepl('u', i); 
                                               i[i1] <- toupper(i[i1]); 
                                               paste0(i, collapse = ' ')
                                               })
      #[1] "FAUUUCET water" "tap water"
      

      函数(i){i1Try
      stringr

      str_replace_all(words, '\\w*u\\w*', toupper)
      # [1] "FAUUUCET water" "tap water" 
      
      更多示例:

      str_replace_all(c('Upset', 'day day up'), '\\w*u\\w*', toupper)
      # [1] "Upset"      "day day UP"
      

      @Sotos感谢您的贡献。它工作得很好;我个人在想,是否可以不执行两次
      I[grepl('u',I)]
      并将其构建为
      function(word){if/do}
      。如果没有更整洁的东西出现,如果您愿意提供答案,我很乐意接受您的解决方案。到目前为止,我最喜欢的解决方案是它在识别单词和应用转换方面具有灵活性。
      sapply(strsplit(words, ' '), function(i) {i1 <- grepl('u', i); 
                                               i[i1] <- toupper(i[i1]); 
                                               paste0(i, collapse = ' ')
                                               })
      #[1] "FAUUUCET water" "tap water"
      
      str_replace_all(words, '\\w*u\\w*', toupper)
      # [1] "FAUUUCET water" "tap water" 
      
      str_replace_all(c('Upset', 'day day up'), '\\w*u\\w*', toupper)
      # [1] "Upset"      "day day UP"