初学者问题......
我有一个这样的清单:
x <- c("aa=v12, bb=x21, cc=f35", "xx=r53, bb=g-25, yy=h48", "nn=u75, bb=26, gg=m98")
(但更多行)
我需要提取“bb =”和“,”之间的内容。即我想要:
x21
g-25
26
在这里阅读了很多类似的问题,我认为它应该是str_extract我应该使用的字符串,但不知怎的,我无法让它工作。感谢您的帮助。
/克里斯
答案 0 :(得分:4)
strapply
可以做到这一点。请注意,[^,]*
匹配一串非逗号。
strapply
提取后引用部分(括号内的部分):
> library(gsubfn)
> strapply(x, "bb=([^,]*)", simplify = TRUE)
[1] "x21" "g-25" "26"
如果有多个x
向量,则在这样的列表中提供它们:
> strapply(list(x, x), "bb=([^,]*)")
[[1]]
[1] "x21" "g-25" "26"
[[2]]
[1] "x21" "g-25" "26"
答案 1 :(得分:2)
使用regexpr
的选项:
> temp = regexpr('bb=[^,]*', x)
> substr(x, temp + 3, temp + attr(temp, 'match.length') - 1)
[1] "x21" "g-25" "26"
答案 2 :(得分:1)
这是使用R中的基本正则表达式函数的一种解决方案。首先,我们使用strsplit
来分割逗号。然后,我们使用grepl
仅过滤以bb=
和gsub
开头的项目,以提取bb=
之后的所有字符。
> x <- c("aa=v12, bb=x21, cc=f35", "xx=r53, bb=g-25, yy=h48", "nn=u75, bb=26, gg=m98")
> y <- unlist(strsplit(x , ","))
> unlist(lapply(y[grepl("bb=", y)], function(x) gsub("^.*bb=(.*)", "\\1", x)))
[1] "x21" "g-25" "26"
如果您想要走这条路,看起来str_replace
就是您所追求的功能:
> str_replace(y[grepl("bb=",y)], "^.*bb=(.*)", "\\1")
[1] "x21" "g-25" "26"
答案 3 :(得分:1)
用逗号作为分隔符读取它并取第二列:
> x.split <- read.table(textConnection(x), header=FALSE, sep=",", stringsAsFactors=FALSE)[[2]]
[1] " bb=x21" " bb=g-25" " bb=26"
然后删除“bb =”
> gsub("bb=", "", x.split )
[1] " x21" " g-25" " 26"