Мы можем использовать extract
от tidyr
. Аргумент regex
соответствует группам захвата (в скобках) и разделяет их на переменные, указанные в аргументе into
. Обратите внимание, что количество групп захвата должно равняться количеству into
имен переменных:
library(dplyr)
library(tidyr)
data %>%
extract(ID, c("Code", "Region"), regex = "(^\\d+)([[:alpha:]]+\\d+)")
Выход:
Code Region Value
1 0011 ER00 91346
2 0011 ER46 59961
3 0011 ER4610 53968
4 0011 ER4620 55083
5 0011 ER4630 51112
6 0011 ER4640 67480
7 0011 ER4650 45612
8 0011 ER4660 53968
Данные:
data <- structure(list(ID = structure(1:8, .Label = c("0011ER00", "0011ER46",
"0011ER4610", "0011ER4620", "0011ER4630", "0011ER4640", "0011ER4650",
"0011ER4660"), class = "factor"), Value = c(91346L, 59961L, 53968L,
55083L, 51112L, 67480L, 45612L, 53968L)), class = "data.frame", row.names = c(NA,
-8L))
extract
против separate
:
В отличие от использования separate
(в ответе @ akrun), extract
точно соответствует содержимому ваших выходных переменных, тогда как separate
соответствует символу разделения (или позиции нулевой длины в случае обходных путей) , Оба действительны и имеют свои плюсы и минусы.
В зависимости от вашего варианта использования, separate
, как правило, более полезно, если вы хотите разбить вашу переменную на несколько столбцов на основе некоторого разделителя, без необходимости знать, каким должно быть содержимое ваших выходных переменных.
extract
более полезен, когда вы должны быть уверены, что выбираете правильные символы из вашего ввода для каждой выходной переменной.
В случае OP это на самом деле не имеет значения, поскольку он / она разделяет входные данные только на две переменные с одним «разделителем», и конкатенация выходных данных точно совпадает с входными данными.