在R中分组不同的长度

时间:2011-08-04 12:06:11

标签: r binning

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)

1 个答案:

答案 0 :(得分:1)

问题仍然没有很好地形成,所以我不确定我是否完全理解你想要什么,但你可能想要使用tablecut的组合。

您的样本数据

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))))