使用r

时间:2017-07-12 11:56:54

标签: r

我想通过')*('

将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), '\\)*(')

如何修改我的剧本?

2 个答案:

答案 0 :(得分:4)

我们可以使用separate执行此操作,指定sep以匹配)后跟*((这些是元字符,即{ {1}}可用于作为一组进行捕获,而()表示0个或多个字符,因此需要对其进行转义(*)以解析文字字符。使用\\,它仅在此匹配的第一个实例处拆分,而其他的则合并到第二列,即'V3'

extra=merge

在OP的代码中,所有元字符都没有被转义

答案 1 :(得分:4)

library(stringr)
data[,c("V2","V3")] <- str_split_fixed(as.character(data$V2), ")*(", 2)

这应该有效!