Как разделить столбец по первой цифре - PullRequest
1 голос
/ 17 апреля 2020

Скажем, если у нас есть фрейм данных, похожий на этот:

name_and_age
Wesley Wycombe27 y.o.
Sally Atkinson33 y.o.
Matthew Lee42 y.o.

Я хотел бы разделить это на два столбца, установив фрейм данных так:

name                   age
Wesley Wycombe         27
Sally Atkinson         33
Matthew Lee            42

До сих пор я пытался использовать и separate(), и extract(), а также использовать [:digit:] и \\d в качестве регулярного выражения, однако все мои попытки были безуспешными.

1 Ответ

2 голосов
/ 17 апреля 2020

Мы можем использовать extract для захвата символов в группу. Здесь мы указываем шаблон для соответствия одному или нескольким символам, которые не являются ди git ([^0-9]+) от начала строки (^), захватывается как группа ((...)), за которой следуют цифры как вторая группа и не захватывать остальные символы (.*)

library(dplyr)
library(tidyr)
df1 %>%
   extract(name_and_age, into = c('name', 'age'),
            '^([^0-9]+)(\\d+).*', convert = TRUE)
#           name age
#1 Wesley Wycombe  27
#2 Sally Atkinson  33
#3    Matthew Lee  42

data

df1 <- structure(list(name_and_age = c("Wesley Wycombe27 y.o.", 
         "Sally Atkinson33 y.o.", 
"Matthew Lee42 y.o.")),
class = "data.frame", row.names = c(NA, 
-3L))
...