str_splt_fixed 从右到左

str_splt_fixed from right to left

我已经尝试搜索此内容并确信答案就在那里,但没有成功。

我正在尝试使用 stringr 包,但要让它从右到左阅读文本行。

library(stringr)
fruits <- c("apples and oranges and pears and bananas", "pineapples and mangos and guavas")
str_split_fixed(fruits, " and ", 3)

这个returns:

"apples"     "oranges" "pears and bananas"
"pineapples" "mangos" "guavas"

我正在尝试 return:

"apples and oranges" "pears" "bananas"
"pineapples" "mangos" "guavas"

它可能不在基础中,stringrstringi 但你可以自己实现它:

sapply(stri_split_fixed(stri_reverse(fruits), " dna ", 3)[[1]], stri_reverse, USE.NAMES=FALSE)
## [1] "bananas"            "pears"              "apples and oranges"

并且,对于更大的示例数据:

fruits <- c("apples and oranges and pears and bananas", 
            "pineapples and mangos and guavas")

do.call(rbind, lapply(stri_reverse(fruits), function(x) {
  rev(sapply(stri_split_fixed(x, " dna ", 3)[[1]], stri_reverse, USE.NAMES=FALSE))
}))

##      [,1]                 [,2]     [,3]              
## [1,] "apples and oranges" "pears"  "bananas"
## [2,] "pineapples"         "mangos" "guavas" 

还有理查德改编的修改版:

matrix(rev(stri_reverse(str_split_fixed(stri_reverse(fruits), 
                                        stri_reverse(" and "), 3))),
       nrow=length(fruits), ncol=3, byrow=TRUE)

哪个效率更高。