如何在 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"
有人可以帮我解决这个问题吗?
非常感谢!
您的函数 string_flip
未矢量化。它一次只适用于一个字符串。
我认为你有额外的 x
这就是字符串加倍的原因。
在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"
我正在尝试编写一个函数,允许我在 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"
有人可以帮我解决这个问题吗? 非常感谢!
您的函数
string_flip
未矢量化。它一次只适用于一个字符串。我认为你有额外的
x
这就是字符串加倍的原因。在
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"