每行具有多个值的密度图

问题描述

我遇到了一个似乎无法解决的问题。我有一个数据框架,可以总结为:

peptide_sequence <- c("YKYTGFTG","YNHRPDVRF","MNALHHPPCS")

start_position <- c(5,33,79)

df <- data.frame(peptide_sequence,start_position)

df$peptide_length <- str_count(df$peptide_sequence)

df$end_position <- (df$start_position + df$peptide_length - 1)
这些数据基本上描述了较大蛋白质中各种肽的位置。我现在想按此较大蛋白中的位置创建一个简单的密度图(在此示例中为5-88)。我没有包含位置列,因为我尝试了几种使用开始和结束位置信息将其放在一起的方法,但是似乎都无法通过geom_density函数正确读取(似乎是因为我试图从每一行中获取多个值)。我遇到的问题是重新处理这些数据/将开始和结束位置数据放在一起,形成可用于创建所需密度图的格式。

例如,我希望第一个肽序列“ YKYTGFTG”朝5:12的位置计数,如起始和结束位置所示。

可以转换这些数据的一种方法基本上是在每个肽的每个位置以一行结尾。这个数据帧的外观示例如下:

peptide_sequence <- c("YKYTGFTG","YKYTGFTG","MNALHHPPCS","MNALHHPPCS")

position <- c(5,6,7,8,9,10,11,12,34,35,36,37,38,39,40,41,79,80,81,82,83,84,85,86,87,88)

df <- data.frame(peptide_sequence,position)

然后将给出以下绘图:

ggplot(df,aes(x = position)) + 
  geom_density()

enter image description here

上面的图基本上是我希望得到的。我正在使用的数据框有很多行肽,因此我无法像上面一样手动进行转换,因此我正在寻找一种可以完成转换的方式,或者寻找一种重新处理数据的方式能够生成相同类型的图。 任何帮助或建议,将不胜感激!

谢谢

解决方法

创建一个列表列,该列表列是seqstart_position之间的end_position。取消嵌套此列将产生所需的结果。

library(tidyverse)

df %>%
  mutate(position = map2(start_position,end_position,seq)) %>%
  unnest(position) %>%
  select(peptide_sequence,position)
#> # A tibble: 27 x 2
#>   peptide_sequence position
#>   <fct>               <int>
#> 1 YKYTGFTG                5
#> 2 YKYTGFTG                6
#> 3 YKYTGFTG                7
#> 4 YKYTGFTG                8
#> 5 YKYTGFTG                9
#> 6 YKYTGFTG               10
#> 7 YKYTGFTG               11
#> 8 YKYTGFTG               12
#> 9 YNHRPDVRF              33
#> 10 YNHRPDVRF             34
#> # ... with 17 more rows

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...