首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取不同的Pack组件[R]

提取不同的Pack组件[R]
EN

Stack Overflow用户
提问于 2018-01-25 20:18:57
回答 1查看 25关注 0票数 1

我想要找到pack中的度量单位。这里我有一个字段,如下所示。

代码语言:javascript
复制
pack <- c("1X7CL ML", "2X3ML CLose","24X33cl Ltront","24X1LTR CLear", "192X5cl mlow")

我需要在这里提取3个组件: 1)包中每个包的数量。这是包中的第一个数字,恰好在X 2)之前,然后是每个包中的卷。这是紧跟在X之后的包中的第二个数字3)第三个是紧跟在卷号之后提到的UOM [重要的是只考虑第一次出现的UOM,因为之后可能会有其他文本)

下面是3个标准单位,它们只会出现,但可以是大写字母或小写字母。

代码语言:javascript
复制
UOM <- c("CL","ML","LTR")

我希望结果给我3个向量:

1)每包数量:1 2 24 24 192 2)每包体积:7 3 33 1 5 3)每包计量单位: CL ML CL LTR CL

在获得第一个结果(即每个包中的数字)的情况下,我有以下代码,它可以很好地工作:

代码语言:javascript
复制
as.numeric(gsub("(.*?)(X.*)", "\\1", pack))

我会感谢任何人的帮助来解救其他人。

提前感谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-25 21:00:39

这个“包”告诉我,运算符的例子不包括小数点。如果我们包含as模式。我们匹配字符(.*),直到'X‘后面跟着一个或多个带小数的数字([0-9.]+)和零个或多个空格(\\s* -表示有空格的情况),捕获非空白字符作为一组((\\S+)),并在替换中使用捕获的组的反向引用(\\1

代码语言:javascript
复制
sub(".*X[0-9.]+\\s*(\\S+).*", "\\1", pack)
#[1] "CL"  "ML"  "cl"  "LTR" "cl"  "LTR" "LTR" "LTR" "LTR" "CL" 

关于第二个问题。我们捕获数字(不确定是否需要捕获小数)

代码语言:javascript
复制
as.numeric(sub(".*X(\\d+).*", "\\1", pack))
# [1]  7  3 33  1  5  1  1  1  1 75

如果我们还需要小数

代码语言:javascript
复制
as.numeric(sub(".*X(\\d+[.]*\\d*).*", "\\1", pack))
#[1]  7.000  3.000 33.000  1.000  5.000  1.140  1.125  1.000  1.000 75.000

请注意,vector或data.frame列可以具有单个class。通过使用as.numeric,所有元素都被转换为numeric类。

数据

代码语言:javascript
复制
pack <- c("1X7CL ML", "2X3ML CLose","24X33cl Ltront","24X1LTR CLear", 
 "192X5cl mlow", "12X1.14 LTR (LTO)", "12X1.125 LTR (DOK)",
  "6X1LTR NRF (JRF)", "12X1LTR NRF (LTO)", "6X75CL (Jacobs) 2014") 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48442719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档