【发布时间】:2020-02-14 21:45:39
【问题描述】:
我有以下数据框。它有 1 列文本,我想使用 dplyr 中的单独函数将其分成多列。
df <- structure(list(CPT.Codes = structure(c(2L, 1L, 3L, 4L, 5L), .Label = c("28296 - CORRECTION OF BUNION...., 64445P - N BLOCK INJ, SCIATIC, SNG, 76942P - US GUIDE, NEEDLE PLACEMENT",
"36821 - AV FUSION DIRECT ANY SITE, 99100P - ANESTHESIA FOR PT OF EXTREME AGE",
"41899 - DENTAL SURGERY PROCEDURE", "50593 - PERC CRYO ABLATE RENAL TUM, 99100P - ANESTHESIA FOR PT OF EXTREME AGE",
"64721 - CARPAL TUNNEL SURGERY"), class = "factor")), class = "data.frame", row.names = c(NA,
-5L))
我想要的输出是下面的数据框。每个 5 位数字或 5 位数字 + 字母代表代码,破折号后面的文本是代码的描述。有时代码的描述有一位数字和多个逗号,所以正则表达式需要将5位数字识别为新代码。
dfDesired <- structure(list(CPTcode1 = c(36821L, 28296L, 41899L, 50593L, 64721L
), CPTdescrip1 = structure(c(1L, 3L, 4L, 5L, 2L), .Label = c("AV FUSION DIRECT ANY SITE",
"CARPAL TUNNEL SURGERY", "CORRECTION OF BUNION....", "DENTAL SURGERY PROCEDURE",
"PERC CRYO ABLATE RENAL TUM"), class = "factor"), CPTcode2 = structure(c(2L,
1L, NA, 2L, NA), .Label = c("64445P", "99100P"), class = "factor"),
CPTdescrip2 = structure(c(1L, 2L, NA, 1L, NA), .Label = c("ANESTHESIA FOR PT OF EXTREME AGE",
"N BLOCK INJ"), class = "factor"), CPTcode3 = structure(c(NA,
1L, NA, NA, NA), .Label = "76942P", class = "factor"), CPTdescrip3 = structure(c(NA,
1L, NA, NA, NA), .Label = "US GUIDE NEEDLE PLACEMENT", class = "factor")), class = "data.frame", row.names = c(NA,
-5L))
我尝试了以下代码的变体。这是错误的。我是正则表达式的新手,无法通过现有示例解决此问题。
CPT %>%
separate(CPT.Codes,
into = c("CPTcode1", "CPTdescrip1", "CTPcode2", "CPTdescrip2", "CPTcode3", "CPTdescrip3"),
sep = "(?<=[A-Z]) ?(?=[0-9])", remove = F) %>%
glimpse
提前致谢。
【问题讨论】:
-
试试
sep = ",(?=\\s*\\d{5})\\s*|\\s+-\\s+"