使用 r 将一列拆分为两列 [重复]
Posted
技术标签:
【中文标题】使用 r 将一列拆分为两列 [重复]【英文标题】:split a column to two columns using r [duplicate] 【发布时间】:2017-12-16 20:16:33 【问题描述】:我想用 ')*(' 将 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), '\\)*(')
如何修改我的脚本?
【问题讨论】:
【参考方案1】:我们可以使用separate
来执行此操作,方法是指定sep
以匹配)
,后跟*
和(
(这些是元字符,即()
可用于作为一个组进行捕获而*
意味着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 的代码中,所有的元字符都没有转义
【讨论】:
【参考方案2】:library(stringr)
data[,c("V2","V3")] <- str_split_fixed(as.character(data$V2), ")*(", 2)
这应该可行!
【讨论】:
以上是关于使用 r 将一列拆分为两列 [重复]的主要内容,如果未能解决你的问题,请参考以下文章