正则表达式 – 基于正则表达式创建新变量
发布时间:2020-12-14 06:32:46 所属栏目:百科 来源:网络整理
导读:我的问题涉及如何根据正则表达式的结果在R的数据框架上创建一个新的变量。 以下是数据的最小例证: df - data.frame(model=c("Legacy 2.0 BG5 B4 AUTO","Legacy 2.0 BH5 AT","Legacy 2.0i CVT Non Leather","Legacy 2.0i CVT","Legacy 2.0 BL5 AUTO B4","Leg
我的问题涉及如何根据正则表达式的结果在R的数据框架上创建一个新的变量。
以下是数据的最小例证: df <- data.frame(model=c("Legacy 2.0 BG5 B4 AUTO","Legacy 2.0 BH5 AT","Legacy 2.0i CVT Non Leather","Legacy 2.0i CVT","Legacy 2.0 BL5 AUTO B4","Legacy 2.0 BP5 AUTO","Legacy 2.0 BM5 AUTO CVT"),CRSP=c(3450000,3365000,4950000,5250000,4787526,3550000,5235000)) df model CRSP 1 Legacy 2.0 BG5 B4 AUTO 3450000 2 Legacy 2.0 BH5 AT 3365000 3 Legacy 2.0i CVT Non Leather 4950000 4 Legacy 2.0i CVT 5250000 5 Legacy 2.0 BL5 AUTO B4 4787526 6 Legacy 2.0 BP5 AUTO 3550000 7 Legacy 2.0 BM5 AUTO CVT 5235000 我想创建一个新的变量’chassis’,其值是相应的’model’变量字符串的第三个元素,结果是: df model CRSP chassis 1 Legacy 2.0 BG5 B4 AUTO 3450000 BG5 2 Legacy 2.0 BH5 AT 3365000 BH5 3 Legacy 2.0i CVT Non Leather 4950000 CVT 4 Legacy 2.0i CVT 5250000 CVT 5 Legacy 2.0 BL5 AUTO B4 4787526 BL5 6 Legacy 2.0 BP5 AUTO 3550000 BP5 7 Legacy 2.0 BM5 AUTO CVT 5235000 BM5 我需要找到一种方法来提取每行中的相应元素,并将它们放在新变量中。
对于这种任务,我是tidyr的大粉丝,将所有的部分提取到单独的列中:
if (!require("pacman")) install.packages("pacman") pacman::p_load(dplyr,tidyr) regx <- "(^[A-Za-z]+s+[0-9.a-z]+)s+([A-Z0-9]+)s*(.*)" df %>% extract(model,c("a","chassis","b"),regx,remove=FALSE) ## model a chassis b CRSP ## 1 Legacy 2.0 BG5 B4 AUTO Legacy 2.0 BG5 B4 AUTO 3450000 ## 2 Legacy 2.0 BH5 AT Legacy 2.0 BH5 AT 3365000 ## 3 Legacy 2.0i CVT Non Leather Legacy 2.0i CVT Non Leather 4950000 ## 4 Legacy 2.0i CVT Legacy 2.0i CVT 5250000 ## 5 Legacy 2.0 BL5 AUTO B4 Legacy 2.0 BL5 AUTO B4 4787526 ## 6 Legacy 2.0 BP5 AUTO Legacy 2.0 BP5 AUTO 3550000 ## 7 Legacy 2.0 BM5 AUTO CVT Legacy 2.0 BM5 AUTO CVT 5235000 您可以使用这个正则表达式更通用: regx <- "(^[^ ]+s+[^ ]+)s+([^ ]+)s*(.*)" 另请注意,您可以使用提取来获取您之前的列,如下所示删除第一组和最后一个组上的分组括号: regx <- "^[A-Za-z]+s+[0-9.a-z]+s+([A-Z0-9]+)s*.*" df %>% extract(model,remove=FALSE) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读