仅反转R中字符串中的字母模式

S_B*_*B_3 7 string r vector alphabetical

我正在尝试学习R并且示例问题是要求仅反转按字母顺序排列的字符串的一部分:

String: "abctextdefgtext"    
StringNew: "cbatextgfedtext"
Run Code Online (Sandbox Code Playgroud)

有没有办法识别字母模式来做到这一点?

akr*_*run 4

这是一种base R基于示例中所示模式的方法。我们将字符串拆分为单个字符 ('v1'),用于match查找字符与字母表位置 ( ) 的位置letters,获取索引的差值并检查它是否等于 1 ('i1')。使用逻辑向量,我们对向量('v1')进行子集化,创建分组变量并根据分组变量反转( rev) 。vector最后将paste字符组合在一起得到预期的输出

v1 <- strsplit(str1, "")[[1]]
i1 <- cumsum(c(TRUE, diff(match(v1, letters)) != 1L))
paste(ave(v1, i1, FUN = rev), collapse="")
#[1] "cbatextgfedtext"
Run Code Online (Sandbox Code Playgroud)

或者正如@alexislaz 在评论中提到的

 v1 = as.integer(charToRaw(str1))
 rawToChar(as.raw(ave(v1, cumsum(c(TRUE, diff(v1) != 1L)), FUN = rev))) 
 #[1] "cbatextgfedtext"
Run Code Online (Sandbox Code Playgroud)

编辑:

1)根据@alexislaz的评论纠正了一个错误

2)更新了评论中@alexislaz建议的另一种方法

数据

str1 <- "abctextdefgtext"
Run Code Online (Sandbox Code Playgroud)