如何解决每行具有多个值的密度图
我遇到了一个似乎无法解决的问题。我有一个数据框架,可以总结为:
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()
上面的图基本上是我希望得到的。我正在使用的数据框有很多行肽,因此我无法像上面一样手动进行转换,因此我正在寻找一种可以完成转换的方式,或者寻找一种重新处理数据的方式能够生成相同类型的图。 任何帮助或建议,将不胜感激!
谢谢
解决方法
创建一个列表列,该列表列是seq
至start_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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。