我有下面的简单例子
library(tidyverse)
dd = data.frame(xx=c("sdsds1234","ddd252","rrr34566"))
dd %>% separate(col = xx,remove =F,into = c("Name","MedID"))
xx Name MedID
1 sdsds1234 sdsds1234 <NA>
2 ddd252 ddd252 <NA>
3 rrr34566 rrr34566 <NA>
然而,我想要的是像这样将字母和数字分开
xx Name MedID
1 sdsds1234 sdsds 1234
2 ddd252 ddd 252
3 rrr34566 rrr 34566
这是使用
extract
- 的一种方法
library(tidyr)
extract(dd, xx, c("Name", "MedID"), "([a-z]+)(\\d+)", remove = FALSE)
# xx Name MedID
#1 sdsds1234 sdsds 1234
#2 ddd252 ddd 252
#3 rrr34566 rrr 34566
并且由于
separate
和extract
都被取代了,我们可以使用新的separate_wider_regex
功能。
dd %>%
separate_wider_regex(xx,
c(Name = "[a-z]+", MedID = "\\d+"), cols_remove = FALSE)
使用
base R
cbind(dd, read.csv(text = sub("(\\D+)(\\d+)", "\\1,\\2", dd$xx),
header = FALSE, col.names = c("Name", "MedID")))
-输出
xx Name MedID
1 sdsds1234 sdsds 1234
2 ddd252 ddd 252
3 rrr34566 rrr 34566