0

ch と shift の 2 つのデータ フレームがあります。データ フレーム chi には、以下に示すように数字を含む pos という名前の列があります。データ フレーム シフトには、名前が shft、start、および end の 3 つの列があります。

ch <- structure(list(pos = c(3.25, 3.75, 4.25, 4.75, 5.25, 5.75, 6.25, 
6.75, 7.25, 7.75, 0.25, 0.75, 1.25, 1.75, 2.25, 2.75, 3.25, 3.75, 
4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.25, 7.75, 0.25, 0.75, 1.25, 
1.75, 2.25)), .Names = "pos", row.names = c(NA, -31L), class = "data.frame")

head(ch)
   pos
1 3.25
2 3.75
3 4.25
4 4.75
5 5.25
6 5.75

shift <- structure(list(shift = structure(c(2L, 3L, 2L, 4L, 3L, 4L, 3L, 
1L, 4L, 1L, 4L, 2L, 1L, 2L, 1L, 3L, 2L), .Label = c("A", "B", 
"C", "D"), class = "factor"), start = c(0, 0.25, 0.75, 1.25, 
1.75, 2.25, 2.75, 3.25, 3.75, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 
7.25, 7.75), end = c(0.25, 0.75, 1.25, 1.75, 2.25, 2.75, 3.25, 
3.75, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.25, 7.75, 8)), .Names = c("shft", 
"start", "end"), class = "data.frame", row.names = c(NA, -17L
))

ヘッド(シフト)

   shft  start end
1     B  0.00 0.25
2     C  0.25 0.75
3     B  0.75 1.25
4     D  1.25 1.75
5     C  1.75 2.25
6     D  2.25 2.75

シフトデータフレームの開始列と終了列にリストされている範囲でchデータフレームのpos列の各番号を確認したいのですが、A、B、C、Dなどのそれぞれのシフトはシフトという名前の列に割り当てる必要があります.

比較は次のようにする必要があり>= start and < endます。

スタックオーバーフローで質問を見て解決策を見つけましたが、値がどの範囲に収まるかのように機能しています

library(data.table)
T1 <- data.table(ch)
T2 <- data.table(shift)
setkey(T2, start, end)
T1[, c("start", "end") := pos] 
foverlaps(T1, T2)

上記のコマンド ラインを使用すると、結果は for 0.25 i のようになり、シフト B で 1 行、シフト c で 1 行が取得されます。私のデータフレームには31行あり、上記のスクリプトを実行した結果、62行あります。

範囲を下回るだけでなく、比較を実行する方法を教えてください(>= start and < end)。実際のデータ フレーム ch は、0.25、3.25、7.25 のように示したものだけでなく、3.14、0.89、7.25、6.93、5、46 のような数字も持ちます。

4

1 に答える 1