【发布时间】:2014-06-20 21:02:22
【问题描述】:
我想将具有接近的值的行组合起来,并将它们的平均值用作新行。这很难解释,所以我将尝试展示一个示例:
row chr pos methbulk htcmeth dist
1 chr1 10 0 100 NA
2 chr1 100010 100 0 100000 #
3 chr1 100020 100 0 10 # These 3 rows should be merged
4 chr1 100030 100 0 10 # because their "pos" is close
5 chr1 250030 100 0 150000
6 chr1 350030 100 23 100000
....
51 chr2 200000 0 100 NA # the methbulk and htcmeth rows should be
52 chr2 200010 100 0 10 # averaged when these two rows are merged
53 chr2 300020 100 0 100010
54 chr2 300030 100 0 10
55 chr2 300040 100 0 10
56 chr2 300050 100 0 10
这里,pos是一行所在的“位置”,而dist是当前行的pos从上一行减去的“距离”,由ddply(data, .(chr), transform, dist=c(NA,diff(pos)))计算得出
理想情况下,距离(dist)彼此接近(例如 1000)的每 2 行或更多行应折叠成单行,并取并报告 methbulk 和 htcmeth 的平均值。完成此操作后,不再需要 dist 列。相反,一个新列“end”应该指定所有合并行的最高“pos”值。
因此,上面的数据应该是这样的:
row chr pos methbulk htcmeth end
1 chr1 10 0 100 10
2 chr1 100010 100 0 100030
5 chr1 250000 100 0 250000 #the merged rows
6 chr1 350000 100 23 350000
....
51 chr2 200000 50 50 200010 #the average values have been taken here
53 chr2 300020 100 0 300050
有什么想法吗?甚至有必要使用距离测量吗?我正在考虑使用基于距离测量的逻辑向量(即,如果距离 1000)
编辑:4 行或更多行呢?答案是否有显着变化?
【问题讨论】: