web-dev-qa-db-ja.com

R-文字列の右側から文字がn回出現した後に情報を抽出します

gsubを使用した抽出の反復を何度も見てきましたが、ほとんどの場合、左から右へ、または1回の発生後に抽出を処理します。 -の4回の出現をカウントし、3回目と4回目の出現の間のすべてを一致させて、右から左に一致させたいと思っています。

例えば:

string                       outcome
here-are-some-words-to-try   some
a-b-c-d-e-f-g-h-i            f

これが私が使ってみたいくつかの参考文献です:

7
alexb523
x = c("here-are-some-words-to-try", "a-b-c-d-e-f-g-h-i")
sapply(x, function(strings){
    ind = unlist(gregexpr(pattern = "-", text = strings))
    if (length(ind) < 4){NA}
    else{substr(strings, ind[length(ind) - 3] + 1, ind[length(ind) - 2] - 1)}
})
#here-are-some-words-to-try          a-b-c-d-e-f-g-h-i 
#                    "some"                        "f" 
2
d.b

文を分割してみませんか?何かのようなもの

string <- "here-are-some-words-to-try"

# separate all words
val <- strsplit(string, "-")[[1]]

# reverse the order
val rev(val)

# take the 4th element
val[4]

# And using a dataframe
library(tidyverse)
tibble(string = c("here-are-some-words-to-try", "a-b-c-d-e-f-g-h-i")) %>% 
mutate(outcome = map_chr(string, function(s) rev(strsplit(s, "-")[[1]])[4]))
0
denrou