提取()之前和%符号之前的所有值

时间:2017-07-19 06:59:07

标签: r regex replace gsub

如何只提取括号()之前和%之前的数字?

df <- data.frame(X = paste0('(',runif(3,0,1), '%)'))


                     X
1 (0.746698269620538%)
2 (0.104987640399486%)
3 (0.864544949028641%)

例如,我想要这样的DF:

                  X
1 0.746698269620538
2 0.104987640399486
3 0.864544949028641

2 个答案:

答案 0 :(得分:3)

我们可以使用sub来匹配((转义\\,因为它是元字符),在字符串的开头(^)后跟0或更多数字([0-9.]*)作为一个组((...))捕获,然后是%和其他字符(.*),将其替换为后向引用(\\1)被捕获的小组

df$X <- as.numeric(sub("^\\(([0-9.]*)%.*", "\\1", df$X))

如果它还包含非数字字符,那么

sub("^\\(([^%]*)%.*", "\\1", df$X)

答案 1 :(得分:3)

使用substr,因为您知道需要省略第一个和最后两个字符:

> df <- data.frame(X = paste0('(',runif(3,0,1), '%)'))
> df
                      X
1  (0.393457352882251%)
2 (0.0288733830675483%)
3  (0.289543839870021%)
> df$X <- as.numeric(substr(df$X, 2, nchar(as.character(df$X)) - 2))
> df
           X
1 0.39345735
2 0.02887338
3 0.28954384