我想提取单元格中的数字信息。我的数据看起来像这样。
item stock
PRE 24DX4SX15G 200
PLS 12RX10SX15G 200
ADU 24PX200ML 200
NIS 18PX40SX11G 200
REF 500GX12D 200
我想提取字母D,R和P之外的数字。我想用这个数字与股票相乘。例如这样的
item stock pcs total
PRE 24DX4SX15G 200 24 4800
PLS 12RX10SX15G 200 12 2400
ADU 24PX200ML 200 24 4800
NIS 18PX40SX11G 200 18 3600
REF 500GX12D 200 12 2400
有人知道如何提取数字吗?提前非常感谢
答案 0 :(得分:2)
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
library(stringr)
dataset <- read.table(text = ' item stock
PRE 24DX4SX15G 200
PLS 12RX10SX15G 200
ADU 24PX200ML 200
NIS 18PX40SX11G 200
REF 500GX12D 200',
header = TRUE)
dataset %>%
mutate(pcs = as.numeric(x = str_sub(string = str_extract(string = item,
pattern = "\\d+[DRP]"),
start = 1,
end = -2)),
total = (stock * pcs))
#> item stock pcs total
#> 1 24DX4SX15G 200 24 4800
#> 2 12RX10SX15G 200 12 2400
#> 3 24PX200ML 200 24 4800
#> 4 18PX40SX11G 200 18 3600
#> 5 500GX12D 200 12 2400
由reprex package(v0.3.0)于2019-07-12创建
希望这会有所帮助。
答案 1 :(得分:1)
我将使用合适的正则表达式:
df$pcs <- gsub("^(.*[^0-9]|)([0-9]+)[DPR].*", "\\2", df$item)
df$pcs <- as.numeric(df$pcs)
说明:
[DPR]
意味着我们要匹配一个D,P或R字符。[^0-9]
表示我们正在匹配除以外的所有内容 数字0-9 \\2
^([0-9]+)[DPR]
,或者在文本内部。因此,我们必须首先匹配字符串的开头(^
),然后要么不匹配任何字符,要么不匹配任何不以数字结尾的内容(.*[^0-9]
)。编辑:使用Stringr库(如@yamabrina在另一个答案中所示),正则表达式要简单得多:
library(stringr)
df$pcs <- as.numeric(str_sub(str_extract(df$item, "[0-9]+[DPR]"), 1, -2))