根据符号在data.frame中拆分行

时间:2018-10-15 09:47:48

标签: r bioinformatics

我想将具有用/ab分隔的字符串的行拆分为新行。请参见下面的输入和输出示例。也许我们可以使用strsplit(d$values,split='/', fixed=TRUE),但是如何将它们分成新的行?

> head(d,3)
                    values   ind
54                 miR-197  9846
55                 miR-197  9846
113 miR-221/222/222ab/1928 56204

投放

    structure(list(values = c("miR-197", "miR-197", "miR-221/222/222ab/1928"
), ind = structure(c(4L, 4L, 6L), .Label = c("6482", "4057", 
"60481", "9846", "7414", "56204", "84957", "29924", "6095", "8301", 
"2355", "88455", "23047", "57590", "5829", "162", "3091", "9766", 
"23406", "3646", "22870", "22898", "8775", "8178", "2077", "64115", 
"6158", "5007", "8567", "10019", "26127", "4739", "6678", "27013", 
"6146", "51060", "1997", "847", "4035", "79026", "8192", "5782", 
"1032", "4354", "5791", "2752", "9873", "6386", "5962", "2230", 
"6938", "6727", "7090", "92912", "55784", "409", "23521", "6279", 
"51312", "7357", "2040", "2934", "9219", "2180", "219333", "114908", 
"50807", "90268", "3098", "1974", "56990", "7791", "162989", 
"9159", "7086", "51762", "9318", "23582", "10632", "54815", "1938", 
"3576", "11214", "167227", "156", "2745", "6138", "391", "10933", 
"5501", "3638", "2316", "2869", "10527", "255809"), class = "factor")), row.names = c(54L, 
55L, 113L), class = "data.frame")

预期输出

values   ind
miR-197  9846
miR-197  9846
miR-221 56204
222a    56204
222b    56204
1928    56204

1 个答案:

答案 0 :(得分:2)

无耻地偷走Ronak Shah的最初解决方案。然后拆分“ ab”。

此解决方案通常不适用于所有字母,因此,如果尝试将其扩展到字母“ a”和“ b”以外的较大问题,则需要注意和修改。

首先,我们添加一个索引列以帮助进行排序,该列将在最后删除。

df <- tidyr::separate_rows(df, values, sep = "\\/")
df$index <- seq_len(nrow(df))
df_ab <- df[grep('ab',df$values),]
df$values <- gsub("ab","a",df$values)
df_ab$values <- gsub("ab","b",df_ab$values)
df <- rbind(df,df_ab)
df <- df[order(df$index),]
df$index <- NULL

##     values   ind
## 1  miR-197  9846
## 2  miR-197  9846
## 3  miR-221 56204
## 4      222 56204
## 5     222a 56204
## 51    222b 56204
## 6     1928 56204
相关问题