我有一組字符向量:
a <- "bmi ch | study"
b <- "bmi * ch | study"
c <- "bmi * ch - 1 | study"
d <- "bmi * ch 0 | study"
e <- "bmi:ch 0 | study"
在這個例子中,我想提取兩個字串"bmi"and "ch",即所需的輸出是c("bmi", "ch")
上面的字串只是示例;要提取的字符元素可以是chand以外的任何其他元素bmi。我正在尋找沒有硬編碼的通用解決方案。
我試過了unlist(stringr::str_extract_all(a, "bmi|ch"))。但是,在這里我手動定義模式"bmi|ch"以實作所需的輸出。因此,這不是通用的解決方案。
uj5u.com熱心網友回復:
假設在最后的注釋中定義了向量 v。然后我們可以使用指定的函式對其進行重疊。如果變數的數量始終相同,您可以交替使用 sapply 給出矩陣。
lapply(sub("\\|.*", "", v), function(x) all.vars(parse(text = x)))
給予:
[[1]]
[1] "bmi" "ch"
[[2]]
[1] "bmi" "ch"
[[3]]
[1] "bmi" "ch"
[[4]]
[1] "bmi" "ch"
[[5]]
[1] "bmi" "ch"
筆記
a <- "bmi ch | study"
b <- "bmi * ch | study"
c <- "bmi * ch - 1 | study"
d <- "bmi * ch 0 | study"
e <- "bmi:ch 0 | study"
v <- c(a, b, c, d, e)
uj5u.com熱心網友回復:
這有點復雜,而且效率不高。我會把它留在這里,以防有人覺得它很有趣。
vecs<-list(a,b, c,d,e)
split_me<-Map(function(x) gsub("([a-z].*[a-z])(\\W.*)","\\1",x,
perl=TRUE), vecs)
lapply(split_me, function(x)
unlist(strsplit(gsub("\\s", "",x), "[ *:]")))
結果
[[1]]
[1] "bmi" "ch"
[[2]]
[1] "bmi" "ch"
[[3]]
[1] "bmi" "ch"
[[4]]
[1] "bmi" "ch"
[[5]]
[1] "bmi" "ch"
資料
a <- "bmi ch | study"
b <- "bmi * ch | study"
c <- "bmi * ch - 1 | study"
d <- "bmi * ch 0 | study"
e <- "bmi:ch 0 | study"
vecs<-list(a,b, c,d,e)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/401067.html
上一篇:在R中洗掉2個向量的部分重疊部分
下一篇:正則運算式匹配陣列中的引數
