我想提取一个跟随模式的第一个数字(这里是*
)
c(" 2 X[0,JOHNSON] * 0 0 1 ",
" 3 X[0,WILLIAMS]",
" * 1 0 1 ",
" 4 X[0,JONES] * 0 0 1 " )
这里我正在寻找(0,NA,1,0)
我怎样才能在R?
中这样做答案 0 :(得分:1)
首先使用%%2
提取偶数位置元素,然后删除所有空格,然后删除substr
,只提取每个字符串的第一个字符
substr(gsub(" ", "", x[seq_along(x)%%2==0]),1,1)
# [1] "0" "1" "0" "1"
as.numeric(substr(gsub(" ", "", x[seq_along(x)%%2==0]),1,1))
# [1] 0 1 0 1
library(stringr)
s <- str_extract(x, "\\* *\\d") # looking for this pattern.
substr(s, nchar(s), nchar(s))
# [1] "0" NA "1" "0"
如果你发现很难理解正则表达式:\\*
表示要搜索*
,*
表示搜索*
和数字{之间的0或更多空格{ {1}}
答案 1 :(得分:0)
我们可以将grep
与substr
as.integer(substr(trimws(v1[!grepl("\\[", v1)]),1, 1))
#[1] 0 1 0 1
对于OP的帖子中的新例子
as.integer(sub(".*(?<=[*])\\s*(\\d+).*", "\\1", v2, perl = TRUE))
#[1] 0 NA 1 0