INPUT1
dput(a1 100 200 +
a1 250 270 +
a1 333 340 -
a2 450 460 +)
输入2
dput(a1 101 106 +
a1 112 117 +
a1 258 259 +
a1 258 259 +
a1 258 259 +
a1 258 259 +
a1 258 259 +
a1 258 259 +
a1 258 259 +
a1 258 259 +
a1 258 259 +
a1 260 262 +
a1 260 262 +
a1 260 262 +
a1 260 262 +
a1 260 262 +
a1 332 333 -
a1 332 333 -
a1 332 333 -
a1 332 333 -
a1 332 333 -
a1 332 333 -
a1 332 333 -
a1 331 333 -
a1 331 333 -
a1 331 333 -
a1 331 333 -
a1 331 333 -
a1 331 333 -)
输出
c s e st 1 2 3 4 5 6 7 8 9 10
a1 100 200 + 1 2 0 0 0 0 0 0 0 0
a1 250 270 + 0 0 0 9 5 0 0 0 0 0
a1 330 340 - 0 0 0 0 0 0 0 6 7 0
a2 450 460 + 0 0 0 0 0 0 0 0 0 0
我想使用input1值来计算点密度(input2)。意味着a1-100-200在这100到200范围内有多少分?即3.我想对所有输入值做同样的事情。我想互相比较。但问题是值的长度(200-100 = 100或270-250 = 20)是不同的。为了将它们相互比较,我需要以我可以比较的方式对它们进行缩放。所以我想出了10个窗口(输出)。我使用input1 bin计算input2点。 最后我需要在x轴上绘制二进制数,在y轴上绘制值xyplot(x(bins),y1(a1:100:200:+)+ y2(a1:250:270:+ y3 ... + y4)< / p>
“+”表示我们需要以100为起点,200为终点,当我们计算箱子时(100-110将是第1箱.....) - 意味着完全相反(190-200将是第一个bin)
1-10表示1到10个箱子
您需要根据bin1的第1列和第2列使用第1列和第2列。我们删除不在范围内的值
c =字符,s = start,e = end,s = strand,1-10是input1的bin。是的,你是正确的abt binning。例如250-270应该有2个数字差异,因为(270-250 = 20,因此对于10个箱子,它将是20/10 = 2)
答案 0 :(得分:1)
问题仍然没有很好地形成,所以我不确定我是否完全理解你想要什么,但你可能想要使用table
和cut
的组合。
您的样本数据
input1 <- data.frame(
type = paste("a", rep(1:2, times = c(3, 1)), sep = ""),
lower = c(100, 250, 333, 450),
upper = c(200, 270, 340, 460)
)
input2 <- data.frame(
type = rep.int("a1", 28),
lower = rep(c(101, 112, 258, 260, 332, 331), times = c(1, 1, 9, 5, 7, 5)),
upper = rep(c(106, 117, 259, 262, 333), times = c(1, 1, 9, 5, 12))
)
首先根据input1
中的值定义分档。
cut_points <- with(input1, sort(c(start, end)))
然后按类型拆分input2$start
,按箱子切割并查找每个箱子中的计数。
with(input2, tapply(start, type, function(x) table(cut(x, cut_points))))
可能会重复end
列。
with(input2, tapply(end, type, function(x) table(cut(x, cut_points))))