我想将具有用/
或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
答案 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