1) разделите Если поля могут иметь переменную длину, но мы знаем, что все второе и четвертое являются цифрами и состоят как минимум из 2 символов, а другие поля содержат не более одного ди git в строке и не будет иметь di git рядом с полем all di git, тогда мы можем заменить любую строку из 2 или более цифр пробелом, той же самой строкой и другим пробелом. Тогда мы можем использовать separate
. gsub
поместит пробел в конце, указывающий на то, что ожидается 5-е поле, хотя оно и отсутствует, поэтому поглотите это, используя поле NA в выражении separate
. (Alternately use the extra = "drop"
аргумент separate
.)
library(dplyr)
library(tibble)
library(tidyr)
df %>%
mutate(x = gsub("(\\d\\d+)", " \\1 ", x)) %>%
separate(x, c("Product", "Size", "Country", "Pall", NA))
## # A tibble: 2 x 4
## Product Size Country Pall
## <chr> <chr> <chr> <chr>
## 1 2XYZ 005 GHT 108
## 2 4T 005 N 108
2) read.pattern Мы можем поочередно использовать read.pattern
, предполагая, что первое поле - это di git, за которым следует не цифрами, второе поле - цифры, третье - не-ди git, а четвертое - цифры.
library(gsubfn)
pat <- "^(\\d\\D+)(\\d+)(.*\\D)(\\d+)"
read.pattern(text = df$x, pattern = pat, colClasses = "character",
col.names = c("Product", "Size", "Country", "Pall"))
## Product Size Country Pall
## 1 2XYZ 005 GHT 108
## 2 4T 005 N 108
2a) strcapture Это также может быть сделано только с использованием базы R с использованием pat
, определенного выше с strcapture
, например:
strcapture(pat, df$x, list(Product = character(0), Size = character(0),
Country = character(0), Pall = character(0)))
## Product Size Country Pall
## 1 2XYZ 005 GHT 108
## 2 4T 005 N 108