На основе ваших данных мы также можем использовать tidyr::extract
, определяя различные группы захвата.
library(dplyr)
library(tidyr)
df %>%
extract(datamatrixtest, into = c("statute", "offense", "cases"),
regex = "(.*?)\\s(.*?)(\\d.*)") %>%
mutate_all(trimws)
# statute offense cases
# <chr> <chr> <chr>
# 1 110.05 Human Service Vehicle Inspection Reqd 6
# 2 23.33(12)(b) ATV-Fail/Stop for Law Enforce. Official 1
# 3 23.33(6)(a) ATV-Fail/Display Lighted Headlamp 1
# 4 341.03 Oper Veh After Sus/Rev or Can of Reg 8,862
# 5 341.04(1) Non-Registration of Vehicle 10,125
# 6 341.04(2) Improper Registration of Vehicle 4
# 7 341.15(1) Fail/Display Vehicle License Plates 2,010
# 8 341.15(1m)(a) Fail/Attach Rear Regis. Decal/Tag 3
# 9 341.15(1m)(b) Fail/Attach Front Regis. Decal/Tag 2
#10 1341.15(2) Improperly Attached License Plates 7
Здесь мы определяем три группы, первые начинаются с начала текста до первого пробела, с которым встречаютсявторая начинается с того места, где заканчивается первая, пока не встретится число, а третья берет все от числа до конца предложения.
data
df <- structure(list(datamatrixtest = c("110.05 Human Service
Vehicle Inspection Reqd 6",
"23.33(12)(b) ATV-Fail/Stop for Law Enforce. Official 1",
"23.33(6)(a) ATV-Fail/Display Lighted Headlamp 1",
"341.03 Oper Veh After Sus/Rev or Can of Reg 8,862",
"341.04(1) Non-Registration of Vehicle 10,125",
"341.04(2) Improper Registration of Vehicle 4",
"341.15(1) Fail/Display Vehicle License Plates 2,010",
"341.15(1m)(a) Fail/Attach Rear Regis. Decal/Tag 3",
"341.15(1m)(b) Fail/Attach Front Regis. Decal/Tag 2",
"1341.15(2) Improperly Attached License Plates 7"
)), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame"))