我想知道是否有更有效的方式来提取p
和r
而不是grep
然后sub
:
v <- c("a","b","P:18.18% R:66.67%","d")
pr <- grep("^P:([^%]*)% R:([^%]*)%$",v,value=TRUE)
(p <- as.numeric(sub("^P:([^%]*)% R:([^%]*)%$","\\1",pr)))
[1] 18.18
(r <- as.numeric(sub("^P:([^%]*)% R:([^%]*)%$","\\2",pr)))
[1] 66.67
答案 0 :(得分:2)
您可以使用gregexpr
和regmatches
提取子字符串:
regmatches(v, gregexpr("(?<=(P|R):).+?(?=%( |))", v, perl = TRUE))
[[1]]
character(0)
[[2]]
character(0)
[[3]]
[1] "18.18" "66.67"
[[4]]
character(0)
您可以使用unlist
创建包含所有结果的单个向量。
unlist(regmatches(v, gregexpr("(?<=(P|R):).+?(?=%( |))", v, perl = TRUE)))
[1] "18.18" "66.67"