使用 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 将一列拆分为两列 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中通过多个分隔符将一列分成两列

如何在熊猫中将一列拆分为两列

如何在 Hive 中将一列拆分为两列

如何将包含日期时间的 DataFrame 列拆分为两列:一列包含日期,另一列包含一天中的时间?

R中根据特定字符将一列拆分为几列的方法

Excel如何把同一列的内容拆分为两列