我想通过')*('
将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), '\\)*(')
如何修改我的剧本?
答案 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)
这应该有效!