【问题标题】:How to split data frame with multiple delimiter using str_split_fixed?如何使用 str_split_fixed 拆分具有多个分隔符的数据帧?
【发布时间】:2016-06-16 14:50:15
【问题描述】:

如何将由多个分隔符分隔的列拆分为数据框中的单独列

read.table(text = " Chr  Nm1 Nm2 Nm3
    chr10_100064111-100064134+Nfif   20  20 20
    chr10_100064115-100064138-Kitl   30 19 40
    chr10_100076865-100076888+Tert   60 440 18
    chr10_100079974-100079997-Itg    50 11 23                
    chr10_100466221-100466244+Tmtc3  55 24 53", header = TRUE)


              Chr              gene   Nm1 Nm2 Nm3
    chr10_100064111-100064134 Nfif   20  20 20
    chr10_100064115-100064138 Kitl   30 19 40
    chr10_100076865-100076888 Tert   60 440 18
    chr10_100079974-100079997 Itg    50 11 23 12                
    chr10_100466221-100466244 Tmtc3  55 24 53 12

我用过

library(stringr)
df2 <- str_split_fixed(df1$name, "\\+", 2)

我想知道如何同时包含 + 和 - 分隔符

【问题讨论】:

  • str_split 中使用正则表达式字符类和"[+-]" 或使用管道+|-。另外,我不确定你是否从stringr 那里获得了任何常规strsplit 并没有做得很好的东西。

标签: r stringr


【解决方案1】:

如果您想将一列拆分为多列,tidyr::separate 很方便:

library(tidyr)

dat %>% separate(Chr, into = paste0('Chr', 1:3), sep = '[+-]')

#              Chr1      Chr2  Chr3 Nm1 Nm2 Nm3
# 1 chr10_100064111 100064134  Nfif  20  20  20
# 2 chr10_100064115 100064138  Kitl  30  19  40
# 3 chr10_100076865 100076888  Tert  60 440  18
# 4 chr10_100079974 100079997   Itg  50  11  23
# 5 chr10_100466221 100466244 Tmtc3  55  24  53

【讨论】:

    【解决方案2】:

    这应该可行:

    str_split_fixed(a, "[-+]", 2)
    

    【讨论】:

    • 如果您使用的是正则表达式,则需要使用str_split(或strsplit),而不是str_split_fixed
    • 来自 str_split_fixed 文档:“默认解释是正则表达式,如 stringi-search-regex 中所述。使用 regex() 控制选项”我也对其进行了测试,似乎可以正常工作
    • 嗯,你是对的! ...虽然这是一组非常混乱的命名函数,因为基本 R 正则表达式 fixed = TRUE 行为。
    【解决方案3】:

    这是在基础 R 中使用strsplit 执行此操作的一种方法:

    # split Chr into a list
    tempList <- strsplit(as.character(df$Chr), split="[+-]")
    
    # replace Chr with desired values
    df$Chr <- sapply(tempList, function(i) paste(i[[1]], i[[2]], sep="-"))
    
    # get Gene variable
    df$gene <- sapply(tempList, "[[", 3)
    

    【讨论】:

    • 尝试 df$gene
    • @beginner 我刚刚复制并粘贴了您的示例 data.frame,将其命名为 df,然后复制并粘贴了我建议的解决方案,但没有收到此错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 2022-01-18
    相关资源
    最近更新 更多