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"