Tidyr使用正则表达式分开

时间:2018-03-22 19:31:40

标签: r regex tidyr

我搜索并搜索了这个并发现了类似的东西,但没有什么是正确的。希望这没有得到回答。

假设我有一个包含Y,N的列,有时还有额外的信息

    df<-data.frame(Names=c("Patient1","patient2","Patient3","Patient4","patient5"),Surgery=c("Y","N","Y-this kind of surgery","See note","Y"))

我正试图将Y或N分成一列,将该列中的所有其他内容分成另一列。

我试过

    df%>%separate('Surgery',c("Surgery","Notes"), sep=" ")

最终会有一个“看到”的列,下一栏有“注释”

    df%>%separate('Surgery',c("Surgery","Notes"), sep = '^Y|^N')

变得奇怪

    df%>%separate('Surgery',c("Surgery","Notes), sep= "^[YN]?")

正确拆分注释,删除Y和N.

有人知道怎么分开吗?我正在寻找的结果是在手术专栏中只有Y或N,而其他任何东西都推到了不同的专栏。

1 个答案:

答案 0 :(得分:4)

我们可以使用extract

中的tidyr
library(tidyr)
library(dplyr)
df %>% 
  extract(Surgery, into = c("Surgery", "Notes"), "^([YN]*)[[:punct:]]*(.*)")
#     Names Surgery                Notes
#1 Patient1       Y                     
#2 patient2       N                     
#3 Patient3       Y this kind of surgery
#4 Patient4                     See note
#5 patient5       Y