1つのデータセット内の変数(またはゲノムに沿った位置)が2番目(遺伝子開始/停止位置)の範囲内に収まる2つのデータセットに参加しようとしています。ただし、位置はユニークではなく、追加の列(染色体)内にネストされます。遺伝子開始/停止位置についても同じことが言えます。私の目標は、それぞれの位置を対応する注釈と効果とリンクさせることです。例えばR、ベクター化された範囲内で結合する
:
library(sqldf)
set.seed(100)
a <- data.frame(
annotation = sample(c("this", "that", "other"), 3, replace=TRUE),
start = seq(1, 30, 10),
chr = sample(1:3, 3, replace=TRUE)
)
a$stop <- a$start + 10
b <- data.frame(
chr = sample(1:3, 3, replace=TRUE),
position = sample(1:15, 3, replace=TRUE),
effect = sample(c("high", "low"), 3, replace=TRUE)
)
アンSQL内部ジョインは私が道の一部を取得:
df<-sqldf("SELECT a.start, a.stop, a.annotation, b.effect, b.position
FROM a, b
inner JOIN a b on(b.position >= a.start and b.position <= a.stop);")
をしかし、これは染色体あたりの位置の繰り返しを考慮していません。 これをループまたは適用関数にラップするという概念的な問題があります。
私はSQLに執着しているわけではありません。これまでのより簡単な問題に取り組んでいます。また、何千もの染色体値があるので、追加の索引列を作成することが適切であるとは確信していません。
マイ所望の出力は次のようになります各position
がchr
一致にNA
ない点を正しいchr
にstart
とstop
点との間に配置されていない、または与えられた
df$chr<-c("NA","2","2")
start stop annotation effect position chr
1 1 11 this high 3 NA
2 1 11 this high 10 NA
3 11 21 this low 14 2
。
すみません、私はセットを逃しました。私がコードを再実行したときの種です。 chrカラムは私が何をしているかを示すために追加したダミーデータです。私はあなたの助けに感謝します。 – smm
@smm申し訳ありませんが、私はまだ何が起こっているのか理解していません。望む結果の 'chr'カラムは不思議です。' '$ chr'と' '$ chr''との関係は理解できません。 – eddi
thanks @eddi 'position'、 'start'、 'stop'は 'chr'番号の中にネストされているので、両方のデータセットで共通でなければなりません。 – smm