R:如果字符串包含点,则解析_编号失败
如果字符串包含R:如果字符串包含点,则解析_编号失败,r,readr,R,Readr,如果字符串包含 它可以很好地处理特殊角色 library(readr) #works parse_number("%ç*%&23") #does not work parse_number("art. 23") Warning: 1 parsing failure. row col expected actual 1 -- a number . [1] NA attr(,"problems") # A tibble: 1 x 4 row col exp
它可以很好地处理特殊角色
library(readr)
#works
parse_number("%ç*%&23")
#does not work
parse_number("art. 23")
Warning: 1 parsing failure.
row col expected actual
1 -- a number .
[1] NA
attr(,"problems")
# A tibble: 1 x 4
row col expected actual
<int> <int> <chr> <chr>
1 1 NA a number .
库(readr)
#工作
解析_数(“%231*%&23”)
#不起作用
第23条(“第23条”)
警告:1解析失败。
行col预期实际值
1--一个数字。
[1] NA
属性(,“问题”)
#一个tibble:1 x 4
行col预期实际值
一个数字。
为什么会这样
更新:
预期结果为
23
点后有一个空格导致错误。此序列的预期数字是多少(0.23或23)
parse_number
似乎要查找由您的区域设置定义的十进制和分组分隔符,请参阅此处的文档
您可以使用以下选项更改区域设置(分组标记是带空格的点):
或删除前面的空间:
parse_number(gsub(" ", "" , "art. 23"))
Output: 0.23
编辑:要将点作为缩写和数字处理,请使用以下命令:
library(stringr)
> as.numeric(str_extract("art. 23", "\\d+\\.*\\d*"))
[1] 23
> as.numeric(str_extract("%ç*%&23", "\\d+\\.*\\d*"))
[1] 23
上面使用正则表达式来标识字符串中的数字模式
查找数字\\d+
找到一个点\..*
查找剩余的数字\\d*
注意:我不是正则表达式专家,但是有很多其他资源可以让你成为一个
解析数字(“第23条”)
产生0.23
,因此周期被解释为浮点数的开始<代码>。23是格式错误的文本。
显然属于艺术
,而艺术。
是文章
的缩写,我认为缩写在字串中很常见。我毫不怀疑人类会将那个段时间作为缩写的一部分进行解析,但是,parse_number
似乎使用了一个正则表达式,将句点视为数字的一部分。也许该功能可以改进以处理此类情况。谢谢您的回答。在我的例子中,
用于缩写,也用作小数点。因此,更改区域设置对我的情况没有帮助。@captcoma,我已经更新了答案。我建议阅读regex/正则表达式,从字符串中解析出所需的数字
library(stringr)
> as.numeric(str_extract("art. 23", "\\d+\\.*\\d*"))
[1] 23
> as.numeric(str_extract("%ç*%&23", "\\d+\\.*\\d*"))
[1] 23