如何在 r 中的字符串中移动模式?

How to move patterns in a string in r?

我正在尝试编写一个函数,允许我在 r 的字符串中移动某些模式。例如,如果我的字符串是 pattern_string1、pattern_string2、pattern_string3、pattern_string4,我想将它们突变为 string1_pattern、string2_pattern、string3_pattern, string4_pattern.

为了实现这一点,我尝试了以下方法:

string_flip <- function(x, pattern){
  if(str_detect(x, pattern)==TRUE){
    str_remove(x, pattern) %>%
    paste(x, "pattern", sep = "_")
  }
}

但是,当我尝试通过以下代码将其应用于字符串向量时:

stringvector <- c(pattern_string1, pattern_string2, pattern_string3, pattern_string4, string5, string6)
string_flip(stringvector, "pattern")

它 returns 警告并更改所有向量,而不仅仅是包含“模式”的向量。此外,它不仅将模式添加到字符串的末尾,还将字符串本身加倍,所以我得到以下结果:

[1] "_string1_pattern_string1_pattern" "_string2_pattern_string2_pattern" "_string3_pattern_string3_pattern"
[4] "_string4_pattern_string4_pattern" "string5_string5_pattern"                "string6_string6_pattern"  

有人可以帮我解决这个问题吗? 非常感谢!

  1. 您的函数 string_flip 未矢量化。它一次只适用于一个字符串。

  2. 我认为你有额外的 x 这就是字符串加倍的原因。

  3. paste中,pattern不应该在引号中。

试试这个功能。

library(stringr)


string_flip <- function(x, pattern){
  trimws(ifelse(str_detect(x, pattern), 
     str_remove(x, pattern) %>% paste(pattern, sep = "_"), x), whitespace = '_')
}


stringvector <- c('pattern_string1', 'pattern_string2', 'pattern_string3', 'pattern_string4')
string_flip(stringvector, "pattern")

#[1] "string1_pattern" "string2_pattern" "string3_pattern" "string4_pattern"