R - 正则表达式根据第一个点分隔字符串?

标签 r regex dplyr tidyr

我有一列填充了包含多个点的字符串。我想将此列分成两部分,分别包含第一个点之前和之后的两个子字符串。

IE。

comb          num
UWEA.n.49.sp   3
KYFZ.n.89.kr   5
     ...

进入
 a         b       num
UWEA    n.49.sp     3
KYFZ    n.89.kr     5
     ...

我正在使用 separate函数来自 tidyr但无法使正则表达式正确。我正在尝试使用来自 this answer 的正则表达式样式:
foo %>%
    separate(comb, into=c('a', 'b'),
             sep="([^.]+)\\.(.*)")

所以那个专栏a应由第一个捕获组 ([^.]+) 确定包含至少一个非点字符,然后是第一个点,然后是第二个捕获组 (.*)只匹配之后剩下的。

但是,这似乎与任何内容都不匹配:
a   b   num
         3
         5

这是我的虚拟数据集:
library(dplyr)
library(tidyr)
foo <- data.frame(comb=replicate(10, 
                                 paste(paste(sample(LETTERS, 4), collapse=''),
                                       sample(c('p', 'n'), 1), 
                                       sample(1:100, 1), 
                                       paste(sample(letters, 2), collapse=''), 
                                       sep='.')
                                 ),
                  num = sample(1:10, 10, replace=T))

最佳答案

在这种情况下,您可以利用 extra = "merge" separate 中的选项.因为 separate默认情况下分隔符号,您不必定义分隔符。如果您愿意,可以使用 "\\."

foo %>%
    separate(comb, into=c('a', 'b'), extra = "merge")

      a       b num
1  NPTE p.10.ku   4
2  YAIU p.54.lw   4
3  CHUR n.51.kx   6
4  EPGX n.14.lg   3
5  POBJ n.11.ja   5
6  LEWI n.72.un   7
7  WLAP n.20.ve  10
8  XZUY p.75.cf   6
9  ZSNJ  p.4.aj   3
10 ABKR n.69.ua   3
extra = "merge"将所有超出您定义的列的额外部分合并到最后一列中。

关于R - 正则表达式根据第一个点分隔字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41271777/

相关文章:

R可视化: sensible repel points on map (beeswarm?)

正则表达式 - 匹配大写字母,特定字符后的简单字符串

r - 如何在来自两个数据帧的分组值之间执行操作

r - Stringr 函数或 gsub() 来查找 x 数字字符串并提取前 x 数字?

r - 根据值和分隔符拆分数据框中的所有列

r - 自定义函数来处理 Excel 中的不同日期格式,尝试使用 curly curly

javascript - 如何指定行/列来应用R Shiny的回调函数?

r - 向 rChart(酒窝)散点图添加线条

python - 在 R 中使用 igraph 绘制图形 : edge length proportional to weight

javascript正则表达式验证带空格的字母数字文本并拒绝特殊字符