【问题标题】:split paired samples based on substring基于子串分割配对样本
【发布时间】:2016-01-12 12:12:29
【问题描述】:

我有两组可以用前两个字母分隔的配对样本。我想使用 [tn][abc] 之类的方式根据配对创建两个组。

Example of paired samples:
nb-008  ta-008
na015   ta-015

数据:

    > colnames(data)
      "nb-008"  "nb-014"  "na015"   "na-018"  "ta-008"   "tc-014"  "ta-015"  "ta-018"  

  patient <- factor(sapply(str_split(colnames(data), '[tn][abc]'), function(x) x[[1]]))

【问题讨论】:

    标签: r substring stringr


    【解决方案1】:

    我们可以使用sub 创建一个分组变量。我们匹配从字符串开头 (^) 后跟 -(如果存在)的 2 个字符 (..) 的模式,然后是我们捕获为一组的一个或多个字符 (.*) (在括号内),并替换为反向引用(\\1)。这可用于split 列名。

    split(colnames(data), sub('^..-?(.*)', '\\1', colnames(data))))
    #$`008`
    #[1] "nb-008" "ta-008"
    
    #$`014`
    #[1] "nb-014" "tc-014"
    
    #$`015`
    #[1] "na015"  "ta-015"
    
    #$`018`
    #[1] "na-018" "ta-018"
    

    数据

     v1 <- c("nb-008",  "nb-014",  "na015",   "na-018",  
                "ta-008",   "tc-014",  "ta-015", "ta-018" ) 
    set.seed(24)
    data <- setNames(as.data.frame(matrix(sample(0:8, 8*5, 
                   replace=TRUE), ncol=8)), v1)
    

    【讨论】:

    • 你能快速解释一下'^..-?(.*)', '\\1'
    • @user2300940 当然我会在描述中添加
    • 是否可以将其作为具有级别的因子输出(在这种情况下为 4)? as.factor(),不起作用
    • @user2300940 不确定我是否理解您的问题。这里的输出是list。如果您想将其转换为factor,请使用lapply(res, factor, levels=nm1),其中nm1 是因子水平的向量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 2021-09-23
    • 1970-01-01
    • 2013-03-02
    • 2019-02-07
    • 1970-01-01
    相关资源
    最近更新 更多