我想要找到pack中的度量单位。这里我有一个字段,如下所示。
pack <- c("1X7CL ML", "2X3ML CLose","24X33cl Ltront","24X1LTR CLear", "192X5cl mlow")我需要在这里提取3个组件: 1)包中每个包的数量。这是包中的第一个数字,恰好在X 2)之前,然后是每个包中的卷。这是紧跟在X之后的包中的第二个数字3)第三个是紧跟在卷号之后提到的UOM [重要的是只考虑第一次出现的UOM,因为之后可能会有其他文本)
下面是3个标准单位,它们只会出现,但可以是大写字母或小写字母。
UOM <- c("CL","ML","LTR")我希望结果给我3个向量:
1)每包数量:1 2 24 24 192 2)每包体积:7 3 33 1 5 3)每包计量单位: CL ML CL LTR CL
在获得第一个结果(即每个包中的数字)的情况下,我有以下代码,它可以很好地工作:
as.numeric(gsub("(.*?)(X.*)", "\\1", pack))我会感谢任何人的帮助来解救其他人。
提前感谢!!
发布于 2018-01-25 21:00:39
这个“包”告诉我,运算符的例子不包括小数点。如果我们包含as模式。我们匹配字符(.*),直到'X‘后面跟着一个或多个带小数的数字([0-9.]+)和零个或多个空格(\\s* -表示有空格的情况),捕获非空白字符作为一组((\\S+)),并在替换中使用捕获的组的反向引用(\\1
sub(".*X[0-9.]+\\s*(\\S+).*", "\\1", pack)
#[1] "CL" "ML" "cl" "LTR" "cl" "LTR" "LTR" "LTR" "LTR" "CL" 关于第二个问题。我们捕获数字(不确定是否需要捕获小数)
as.numeric(sub(".*X(\\d+).*", "\\1", pack))
# [1] 7 3 33 1 5 1 1 1 1 75如果我们还需要小数
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类。
数据
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") https://stackoverflow.com/questions/48442719
复制相似问题