我有一列填充了包含多个点的字符串。我想将此列分成两部分,分别包含第一个点之前和之后的两个子字符串。
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/