Pode ser uma duplicata, mas nenhuma das perguntas que encontrei parece ajudar no meu caso.
Eu tenho um finaldf
quadro de dados que contém valores em diferentes pontos no tempo, e pontos no tempo específicos são usados como quebras no eixo x (correspondendo a uma sequência de DNA). Eu consigo assim:
myseq <- "AGAATATTATACATTCATCT"
set.seed(123)
mydata <- data.frame(time=1:100, value=rnorm(100, mean=10, sd=2))
indices <- seq(5, 100, length.out=20)
seqsplit <- unlist(strsplit(myseq, ""))
ind_df <- data.frame(call=seqsplit, time=indices)
finaldf <- dplyr::left_join(mydata, ind_df, by="time")
Parece assim:
> finaldf
time value call
1 1 8.879049 <NA>
2 2 9.539645 <NA>
3 3 13.117417 <NA>
4 4 10.141017 <NA>
5 5 10.258575 A
6 6 13.430130 <NA>
7 7 10.921832 <NA>
8 8 7.469878 <NA>
9 9 8.626294 <NA>
10 10 9.108676 G
11 11 12.448164 <NA>
12 12 10.719628 <NA>
13 13 10.801543 <NA>
14 14 10.221365 <NA>
15 15 8.888318 A
...
E eu ploto assim:
P <- ggplot2::ggplot(finaldf, ggplot2::aes(x=time, y=value)) +
ggplot2::geom_line(linewidth=0.5) +
ggplot2::scale_x_continuous(breaks=indices, labels=seqsplit) +
ggplot2::theme_light()
grDevices::pdf(file="test.pdf", height=4, width=10)
print(P)
grDevices::dev.off()
Resultando neste gráfico:
Agora quero introduzir diferentes lacunas na sequência e obter "gráficos com lacunas", idênticos ao acima, mas com lacunas.
Meu ponto de partida seriam as finaldf
sequências originais e diferentes com lacunas, idênticas à sequência original, mas com lacunas. Por exemplo:
gapseq1 <- "AGAA-TAT--TAT-ACATT---CATCT-"
gapseq2 <- "A-G-AATAT----TATACATTCA-TCT"
Para essas duas sequências lacunadas, quero recriar os seguintes gráficos (de preferência preservando a grade, mas não é necessário):
Como posso fazer isso de maneira fácil? Obrigado!
Basta remover os valores quando não quiser nenhum ponto:
Use
gregexpr
para encontrar os índices de cada "-" na sua sequência de lacunas eadd_row
para adicionar linhas ao quadro de dados usando esses índices.