разделение переменного кода продукта на буквы и цифры - PullRequest
0 голосов
/ 01 июня 2018

У меня есть переменная кода продукта, например:

Product Code
RMMI001,
RMMI001,
CMCM009,
ASCMOT064,
ASPMOA023,
CMCM009,
CMCM012,
CMCM001,
ASCMBW001,
RMMI001,
TMHO002,
TMSP001,
TMHO002,
TMDMST003

Мне нужно разделить их и эти символы в другом столбце.

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

А как насчет этого?

# Sample product codes
ss <- c("RMMI001", "RMMI001", "CMCM009", "ASCMOT064", "ASPMOA023", "CMCM009", "CMCM012", "CMCM001", "ASCMBW001", "RMMI001", "TMHO002", "TMSP001", "TMHO002", "TMDMST003")

# Separate code and numbers and store in data.frame
read.csv(text = gsub("^([a-zA-Z]+)(\\d+)$", "\\1,\\2", ss), header = F)
#       V1 V2
#1    RMMI  1
#2    RMMI  1
#3    CMCM  9
#4  ASCMOT 64
#5  ASPMOA 23
#6    CMCM  9
#7    CMCM 12
#8    CMCM  1
#9  ASCMBW  1
#10   RMMI  1
#11   TMHO  2
#12   TMSP  1
#13   TMHO  2
#14 TMDMST  3
0 голосов
/ 01 июня 2018

Вы также можете использовать tidyr::extract, он работает только с фреймами данных.

tidyr::extract(data.frame(x  =c("RMMI001", "CMCM009")),x, c("first", "second"), "([a-zA-Z]+)(\\d+)" )

Вывод:

#  first second
#1  RMMI    001
#2  CMCM    009

Это извлечет оба алфавитаи числа в отдельных столбцах, если вы выберете «([a-zA-Z] +) \ d +» вместо «([a-zA-Z] +) (\ d +)».Затем он извлечет только первое совпадение, представленное в виде английских слов, как показано ниже.Обратите внимание, что здесь разница заключается в группе захвата, представленной круглыми скобками. Она используется здесь для захвата совпадения, в данном случае это слова и цифры в отдельных столбцах.

    tidyr::extract(data.frame(x  =c("RMMI001", "CMCM009")),x, c("first"), "([a-zA-Z]+)\\d+" )
   #   first
   # 1  RMMI
   # 2  CMCM
0 голосов
/ 01 июня 2018

Вы можете попробовать использовать sub здесь, чтобы удалить все конечные числа, оставив вас с символьной частью:

df <- data.frame(product_code=c("RMMI001", "RMMI001", "CMCM009"))
df$code <- sub("\\d*$", "", df$product_code)
df

  product_code code
1      RMMI001 RMMI
2      RMMI001 RMMI
3      CMCM009 CMCM

Демо

...