如何提取单元格中特定字符串旁边的数字?

时间:2019-07-13 07:26:08

标签: r text-extraction

我想提取位于特定字符串旁边的单元格中的数字信息。我的数据看起来像这样。

    item             stock
PRE 24GUSSETX4SX15G   200
PLS 12KLRX10SX15G     200
ADU 24SBX200ML        200
NIS 18BNDX40SX11G     200
REF 500GX12BTL        200
我想提取字符串'GUSSET','KLR','SB','BND'和'BTL'旁边的数字。我想用这个数字与股票相乘。例如这样的

            item         stock    pcs    total
    PRE 24GUSSETX4SX15G   200      24    4800
    PLS 12KLRX10SX15G     200      12    2400 
    ADU 24SBX200ML        200      24    4800
    NIS 18BNDX40SX11G     200      18    3600
    REF 500GX12BTL        200      12    2400

有人知道如何提取数字吗?提前非常感谢

2 个答案:

答案 0 :(得分:1)

使用基数R的一种方法是使用sub提取除这些组之外的数字,并将它们与stock乘以得到total

df$pcs <- as.numeric(sub(".*?(\\d+)(GUSSET|KLR|SB|BND|BTL).*", "\\1", df$item))
df$total <- df$stock * df$pcs

df
#               item stock pcs total
#PRE 24GUSSETX4SX15G   200  24  4800
#PLS   12KLRX10SX15G   200  12  2400
#ADU      24SBX200ML   200  24  4800
#NIS   18BNDX40SX11G   200  18  3600
#REF      500GX12BTL   200  12  2400

或者所有东西都在一个管道中

library(dplyr)
df %>%
  mutate(pcs = as.numeric(sub(".*?(\\d+)(GUSSET|KLR|SB|BND|BTL).*", "\\1", item)), 
         total = stock * pcs)

答案 1 :(得分:0)

我们可以在tidyverse

中完成此操作
library(tidyverse)
df %>%
    mutate(pcs = as.numeric(str_extract(item, "(\\d+)(?=(GUSSET|KLR|SB|BND|BTL))")),
    total = pcs * stock)
#                 item stock pcs total
#1 PRE 24GUSSETX4SX15G   200  24  4800
#2   PLS 12KLRX10SX15G   200  12  2400
#3      ADU 24SBX200ML   200  24  4800
#4   NIS 18BNDX40SX11G   200  18  3600
#5      REF 500GX12BTL   200  12  2400

数据

df <- structure(list(item = c("PRE 24GUSSETX4SX15G", "PLS 12KLRX10SX15G", 
"ADU 24SBX200ML", "NIS 18BNDX40SX11G", "REF 500GX12BTL"), stock = c(200L, 
200L, 200L, 200L, 200L)), class = "data.frame", row.names = c(NA, 
-5L))