在R中整理数据并从data frame提取double类型数值的最佳方法是什么?
R语言从混杂文本的调查回复中提取数值并转double的最佳实现
parse_double()仅支持处理纯数值格式的字符串,只能自动忽略前后空白,无法识别嵌入的其他文本,你的场景可以用以下两种方案实现:
方案1:使用readr包的parse_number()(最适配普通场景)
这是tidyverse生态专门为混杂文本的数值提取设计的函数,会自动忽略所有非数值的前后缀,直接提取连续数字段,原生支持小数、百分比、货币符号等常见格式,不需要手动写正则。
library(tidyverse) # 示例数据 df <- tibble(a = c("10.5", "about 30", "25 per month")) # 转换为double类型 df <- df %>% mutate(a_num = parse_number(a)) # 输出结果 # # A tibble: 3 × 2 # a a_num # <chr> <dbl> # 1 10.5 10.5 # 2 about 30 30 # 3 25 per month 25
该方案可以覆盖90%以上的普通调查回复数值提取需求。
方案2:正则自定义提取(适配复杂场景)
如果你的字符串中包含多个数值、负数、特殊格式的数值,可以通过正则自定义匹配规则后再转double:
library(tidyverse) df <- df %>% # 正则匹配整数/小数,需要匹配负数的话改为 "-?\\d+\\.?\\d*" mutate(a_num = as.double(str_extract(a, "\\d+\\.?\\d*")))
如果单条字符串需要提取多个数值,可以搭配str_extract_all()+unnest()处理。
内容的提问来源于stack exchange,提问作者Jeremy Hansen
相关产品推荐
相关产品推荐

