如何使用单独的功能将字符与数字分开

问题描述 投票:0回答:2

我有下面的简单例子

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
r tidyverse stringr
2个回答
1
投票

这是使用

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)

0
投票

使用

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
© www.soinside.com 2019 - 2024. All rights reserved.