Я хочу разделить столбец на 5 различных столбцов, основанных на его букв и цифр - PullRequest
0 голосов
/ 25 апреля 2019

В моей таблице данных есть столбец, который нужно разделить на 5 столбцов.

Типичное значение - 1A02B1, мне нужно разделить его на столбцы 1, A, 02, B, 1.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

1) Предполагая, что в конце кадра входных данных, показанного в примечании, передается шаблон, соответствующий цифрам, не цифрам, цифрам, не цифрам и цифрам, в read.pattern, который будет выделять захватгруппирует в поля:

library(gsubfn)
pat <- "(\\d+)(\\D+)(\\d+)(\\D+)(\\d+)"
read.pattern(text = DF$x, pattern = pat, colClasses = "character")

, давая:

  V1 V2 V3 V4 V5
1  1  A 02  B  1

Возможно, вам придется пропустить или изменить аргумент colClasses в зависимости от того, что вы хотите.

2) Альтернативно, strsplit может использоваться для создания этой матрицы:

do.call("rbind", strsplit(DF$x, "(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)", perl = TRUE))
##      [,1] [,2] [,3] [,4] [,5]
##  [1,] "1"  "A"  "02" "B"  "1" 

Примечание

DF <- data.frame(x = "1A02B1", stringsAsFactors = FALSE)
0 голосов
/ 25 апреля 2019

Мы можем создать разделитель с помощью регулярного выражения, а затем использовать read.csv из base R

v1 <- gsub("(?<=[A-Z])(?=[0-9])|(?<=[0-9])(?=[A-Z])", ",", df1$Col1, perl = TRUE)
read.csv(text = v1, header = FALSE)
#  V1 V2 V3 V4 V5
#1  1  A  2  B  1
#2  1  B  3  C  1

Если нам нужен 3-й столбец как в строковом формате, укажите colClasses

read.csv(text = v1, header = FALSE, colClasses = c('integer', 
   'character', 'character', 'character', 'integer'),
       stringsAsFactors = FALSE) 
#   V1 V2 V3 V4 V5
#1  1  A 02  B  1
#2  1  B 03  C  1

Данные

df1 <- data.frame(Col1 = c("1A02B1", "1B03C1"), stringsAsFactors = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...