提取R中2个不同字符之间的值

gj3fmq9x  于 2023-01-22  发布在  其他
关注(0)|答案(3)|浏览(137)

如果我有这个:

2 (5.7%)
34 (8.9%)

我怎样才能只提取出第一个(和%(只是百分比数字)之间的内容?

5.7
8.9
nvbavucw

nvbavucw1#

我们可以使用sub来匹配字符(.*)直到左大括号(\\(),捕获不是%[^%]+)的字符作为一个组,并替换为捕获组(\\1)的反向引用

as.numeric(sub(".*\\(([^%]+).*", "\\1", str1))
[1] 5.7 8.9

或者使用str_extract

library(stringr)
as.numeric(str_extract(str1, "\\((.*)%", group = 1))
[1] 5.7 8.9

数据

str1 <- c("2 (5.7%)", "34 (8.9%)")
mf98qq94

mf98qq942#

为了补充@akrun的回答,我以前遇到过这个问题,并最终使用以下方法“拆分”mean (stdev)count (proportion%)

library(tidyverse)
df <- data.frame(result = c("2 (5.7%)",
                            "34 (8.9%)"))

df
#>      result
#> 1  2 (5.7%)
#> 2 34 (8.9%)

df %>%
  mutate(result = str_remove_all(result, "\\(|\\%\\)")) %>%
  separate(col = result, into = c("count", "proportion (%)"),
           sep = " ", convert = TRUE)
#>   count proportion (%)
#> 1     2            5.7
#> 2    34            8.9

这会将列转换为“正确的”类型:

str(df)
#> 'data.frame':    2 obs. of  2 variables:
#>  $ count         : int  2 34
#>  $ proportion (%): num  5.7 8.9
wmomyfyw

wmomyfyw3#

只是为了好玩:

library(readr)
library(stringr)
parse_number(str_replace(str1, paste(parse_number(str1), collapse = "|"), ''))
[1] 5.7 8.9

相关问题