繁体   English   中英

在 R 中提取向量中的字符元素

[英]Extract character elements in a vector in R

在下面a,b,..., e等字符向量中,我想知道如何提取两个字符元素,即"bmi""ch" (即, desired_output_in_this_case = c("bmi","ch")

下面的示例只是一个玩具示例,字符元素可以是chbmi以外的任何其他元素。 我正在寻找一个通用的解决方案。

我尝试了以下解决方案( unlist(stringr::str_extract_all(a, "bmi|ch")) )。 但是我们应该在其中手动定义"bmi|ch"以提供所需的 output。 因此,这不是一个通用的解决方案。

a <- "bmi + ch | study"
b <- "bmi * ch | study"
c <- "bmi * ch - 1 | study"
d <- "bmi * ch + 0 | study"
e <- "bmi:ch + 0 | study"

假设最后注释中定义的向量v。 然后我们可以使用指示的 function 覆盖它。 如果变量的数量始终相同,您可以交替使用 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)

这有点复杂。 我会把它留在这里,以防有人觉得它有趣。

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM