在R中的列数据框中拆分字符串,并为子字符串创建其他列

mil*_*lan 4 split r dataframe

当使用基因组阵列数据时,通常将"探针"分配给不同的基因(不同的转录本).对象df显示了这样的一个例子.

df <- data.frame(c("geneA;geneB;geneB", "geneG", "geneC;geneD"))
colnames(df) <- "gene.names"
df#looks like this:

         gene.names
1 geneA;geneB;geneB
2             geneG
3       geneC;geneD
Run Code Online (Sandbox Code Playgroud)

我想将所有元素拆分为df$gene.namesat ;并将每个子字符串放在一个新列中.NA如果连续不再有基因,可以使用.

这个脚本有效,但我想大多数人会同意这个贪婪的代码而且效率不高.有人可以提出更好的选择吗?

library(plyr)#load this library first

out <- NULL
for (i in 1:NROW(df)){
    one <- as.data.frame(t(as.data.frame(strsplit(as.character(df[i,1]), ";"))))
    out <- rbind.fill(out, one)
}
out#looks like this:

     V1    V2    V3
1 geneA geneB geneB
2 geneG  <NA>  <NA>
3 geneC geneD  <NA>
Run Code Online (Sandbox Code Playgroud)

jal*_*pic 6

我建议使用splitstackshape这个:

splitstackshape::cSplit(df, splitCols="gene.names", sep=";")

   gene.names_1 gene.names_2 gene.names_3
1:        geneA        geneB        geneB
2:        geneG           NA           NA
3:        geneC        geneD           NA
Run Code Online (Sandbox Code Playgroud)