如何只提取括号()
之前和%
之前的数字?
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
答案 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