我有一个包含三列的数据集,名为chr,leftPos和Z Score。 左侧pos在chr内变化(leftPos是染色体chr中基因的位置 - 它是染色体特异性而不是绝对编号系统) 我想根据每个染色体的binned leftPos绘制Z得分的总和。
数据如下所示:
chr leftPos ZScore
chr1 10 5
chr1 10000 4
chr1 17887 4
chr1 19999 4
chr2 24 0
chr2 178 -2
chr2 19000 -2
绘图前的数据应如下所示:
chr1
Bins: SummedZScore
1-10000 9
10001-20000 8
chr2
Bins: SummedZScore
1-10000 -2
10001-20000 -2
答案 0 :(得分:1)
查看我今天早些时候回答的similar post。对于此数据集,请尝试:
tbl <- structure(list(chr = c("chr1", "chr1", "chr1", "chr1", "chr2",
"chr2", "chr2"), leftPos = c(10L, 10000L, 17887L, 19999L, 24L,
178L, 19000L), ZScore = c(5L, 4L, 4L, 4L, 0L, -2L, -2L)), .Names = c("chr",
"leftPos", "ZScore"), class = "data.frame", row.names = c(NA, -7L))
library(dplyr)
tbl_df(tbl) %>%
group_by(chr, binnum = (leftPos-1) %/% 10000) %>%
summarise(SummedZScore = sum(ZScore)) %>%
mutate(binRight = (binnum+1) * 10000) %>%
select(binRight, SummedZScore)
## Source: local data frame [4 x 3]
## Groups: chr
##
## chr binRight SummedZScore
## 1 chr1 10000 9
## 2 chr1 20000 8
## 3 chr2 10000 -2
## 4 chr2 20000 -2
我在这里硬编码10000
,但这很容易修复。我做(leftPos-1)
的原因是你想要10000包含在较小的bin中,而不是下一个bin中的第一个bin。 (binnum+1)
的使用主要是装饰性的,无论您想知道bin 启动的位置还是停止的位置。您可以更进一步添加一列,以便您可以为每个行/ bin创建开始和停止数字。