【问题标题】:strsplit intermediate pattern in first column in a data framestrsplit 数据框中第一列中的中间模式
【发布时间】:2016-09-29 08:13:27
【问题描述】:

我有一个数据框,我想将第一列拆分为两列,但单独的模式与其他模式相似,我只想拆分位于数字 4 的模式。

data frame:
TCGA-TS-A7P1-01A-41D-A39S-05     0.8637304    
TCGA-NQ-A57I-01A-11D-A34E-05     0.7812147    
TCGA-3H-AB3O-01A-11D-A39S-05     0.8963944    
TCGA-LK-A4O2-01A-11D-A34E-05     0.6942843    
TCGA-MQ-A4LI-01A-11D-A34E-05     0.8882558    

desired output:
TCGA-TS-A7P1-01A    41D-A39S-05    0.8637304    
TCGA-NQ-A57I-01A    11D-A34E-05    0.7812147    
TCGA-3H-AB3O-01A    11D-A39S-05    0.8963944    
TCGA-LK-A4O2-01A    11D-A34E-05    0.6942843    
TCGA-MQ-A4LI-01A    11D-A34E-05    0.8882558    

我试过了:

sapply(strsplit(as.character(df$ID), "-"), '[', 1:4)

但是,上面的输出不是我想要的。非常感谢。

【问题讨论】:

    标签: r dataframe split apply sapply


    【解决方案1】:

    您的第一列的所有元素似乎都具有相同的长度,因此一种简单的方法可能是:

    df <- data.frame(col1 = c("TCGA-TS-A7P1-01A-41D-A39S-05","TCGA-NQ-A57I-01A-11D-A34E-05","TCGA-3H-AB3O-01A-11D-A39S-05"),
                     col2 = c(0.8637304,0.7812147,0.8963944), stringsAsFactors = FALSE)
    
    df$col1bis <- substr(df$col1,18,28)
    df$col1 <- substr(df$col1,1,16)
    

    然后我重新排列列的顺序:

    df <- df[, c(1,3,2)]
    

    导致:

    > df
                  col1     col1bis      col2
    1 TCGA-TS-A7P1-01A 41D-A39S-05 0.8637304
    2 TCGA-NQ-A57I-01A 11D-A34E-05 0.7812147
    3 TCGA-3H-AB3O-01A 11D-A39S-05 0.8963944
    

    【讨论】:

    • Ty 进行编辑,至少更简单和正确。
    • arrange 用于对行进行排序。如果你想用dplyr改变列顺序,你可以使用select,例如:df %&gt;% select(col1, col1bis, col2)
    【解决方案2】:

    我试过这个,效果很好。

    df <- cbind(df[,1],df)
    df[,1] <- substr(df[,1],1,16)
    df[,2] <- substr(df[,2],18,28)
    

    【讨论】:

    • @ProcrastinatusMaximus 哦,是的,我后面有很多专栏。所以这个 df
    • 如果这将是您的固定格式,您可以使用它。然而,这是非常危险的。 1 个字符在这里和那里,这将失败。
    • @RonakShah 是的,我想是的,还有其他解决方案吗?我尝试使用 sapply 但根本无法解决,所以我打算这样做。
    猜你喜欢
    • 2017-02-07
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 2019-12-19
    相关资源
    最近更新 更多