我想通过 ')*(' 将 V2 列拆分为两列
V1 V2
r1 (Direct)*(Mary*(Sewnf 45*S-a))
r2 (Ax 70a12*Qunion)*(Kin - 32431*Tip)
r3 (PAN*Q-23)*(BE 05/514/10)
然后我可以在下面看到。
V1 V2 V3
r1 (Direct Mary*(Sewnf 45*S-a))
r2 (Ax 70a12*Qunion Kin - 32431*Tip)
r3 (PAN*Q-23 BE 05/514/10)
这是我尝试过的东西,但显然它没有达到我的目标。
library(stringr)
str_split_fixed(as.character(data$V2), '\\)*(', 2)
str_split_fixed(as.character(data$V2), '\\)*\\(', 2)
并且也在尝试。
strsplit(as.character(data$V2), '\\)*(')
如何修改我的脚本?
我们可以separate
通过指定sep
to 匹配 a)
后跟 a*
和 a (
(这些是元字符,()
即可用于作为一个组捕获同时*
隐含 0 个或多个字符,因此需要对其进行转义 ( \\
) 以解析文字字符)来实现此目的。使用extra=merge
,它仅在此匹配的第一个实例中拆分,其他实例合并到第二列中,即“V3”
library(tidyr)
separate(df1, V2, into = c("V2", "V3"), "\\)\\*\\(", extra = "merge")
# V1 V2 V3
#1 r1 (Direct Mary*(Sewnf 45*S-a))
#2 r2 (Ax 70a12*Qunion Kin - 32431*Tip)
#3 r3 (PAN*Q-23 BE 05/514/10)
在 OP 的代码中,所有元字符都没有被转义
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句