首页 > 解决方案 > 最后一位数字上的单独列

问题描述

假设我有一个像这样的df:

x <- data.frame("SN" = 1:3, "Age" = c(21,15,2), "Name" = c("Q62yes","Q44_1_1Maybe", "Q2Some times"))

我想将 Name 列分开,这样:

x_out <- data.frame("SN" = 1:3, "Age" = c(21,15,2), "Name" = c("Q62","Q44_1_1","Q2"), "New" = c("yes", 'Maybe', 'some times'))

我试过这个,但我不认为我的正则表达式没有按预期将它分成两组。有什么建议么?

x %>% 
  tidyr::separate(Name,c("name",'new'), sep = "(Q[[:digit:]]*_[[:digit:]])*([[:alpha:]]*\\s*)")

标签: rregex

解决方案


您可以使用

x %>% 
   tidyr::extract(Name,c("name",'new'), "(.*?\\d)([[:alpha:]].*)")

正则表达式意味着:

  • (.*?\d)- 第 1 组:尽可能少的任何零个或多个字符,直到后续子模式后面的数字
  • ([[:alpha:]].*)- 第 2 组:一个字母,然后是字符串的其余部分。

请参阅正则表达式演示

带输出的 R 测试:

> x %>% 
+   tidyr::extract(Name,c("name",'new'), "(.*?\\d)([[:alpha:]].*)")
  SN Age    name        new
1  1  21     Q62        yes
2  2  15 Q44_1_1      Maybe
3  3   2      Q2 Some times

推荐阅读