-1

input1

dput(a1  100 200 +
a1  250 270 +
a1  333 340 -
a2  450 460 +)

input2

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ビンを使用してinput2ポイントをカウントします。最後に、x軸にビンをプロットし、y軸に値をプロットする必要がありますxyplot(x(bins)、y1(a1:100:200:+)+ y2(a1:250:270:+ y3 ... + y4)

「+」は、ビンを計算するときに開始点として100、終了点として200を取る必要があることを意味します(100-110は最初のビンになります.....)-正反対を意味します(190-200は最初のビンになります)

1-10は、1から10のビンを意味します

ビンのcolumn1キーに基づいて列1と2を使用する必要があります。範囲内にない値を削除します

c =文字、s =開始、e =終了、s =ストランド、1〜10はinput1のビンです。はい、あなたは正しいビニングです。たとえば、250-270には2つの数値の違いがあります。これは、(270-250 = 20であるため、10個のビンの場合は20/10 = 2になります)

4

1 に答える 1

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))))
于 2011-08-04T12:58:00.863 に答える