【问题标题】:split a column to two columns using r [duplicate]使用 r 将一列拆分为两列 [重复]
【发布时间】: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), '\\)*(')

如何修改我的脚本?

【问题讨论】:

    标签: r


    【解决方案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)
      

      这应该可行!

      【讨论】:

        猜你喜欢
        • 2018-02-05
        • 2021-12-28
        • 1970-01-01
        • 2019-07-06
        • 1970-01-01
        • 2015-02-03
        • 2015-11-09
        • 2023-03-23
        • 1970-01-01
        相关资源
        最近更新 更多