簡體   English   中英

基於R中兩個范圍的組合兩個數據幀

[英]Combining two data frames based on ranges in both in R

我在R中有兩個數據幀。每個數據幀都有開始和結束時間(分別標記為t1和t2)和相關的標簽。 一張桌子代表聲音,一張桌子代表單詞。 我想根據每種聲音的時間找出與每種聲音相關聯的單詞。 這些表如下所示:

表格1:

  t1         t2         label1       
1 0.09657247 0.14520627      j
2 0.14520627 0.21598818     a:
3 0.21598818 0.29489410      c
4 0.29489410 0.35215657      i

表2:

  t2_1       t2_2         label2
1 0.09657247 0.21598818    ja:
2 0.21598818 0.35215657     ci
3 0.35215657 0.53570333    pek
4 0.53570333 0.63220031     nu

我想得到一個如下所示的輸出,其中基於t1和t2在t2_1和t2_2的范圍內,從第二個表中提取t2_1,t2_2和label_2列。

  t1         t2         label1 t2_1       t2_2          label2    
1 0.09657247 0.14520627      j 0.09657247 0.21598818    ja:
2 0.14520627 0.21598818     a: 0.09657247 0.21598818    ja:
3 0.21598818 0.29489410      c 0.21598818 0.35215657    ci
4 0.29489410 0.35215657      i 0.21598818 0.35215657    ci

我試過使用一堆應用函數和其他方法,但是我一直無法弄清楚。 任何幫助,將不勝感激!

您可以使用sqldf包將兩個表連接起來,我將它們稱為tb1tbl2 我以“在范圍內”假設tha表示間隔[t1,t2]是間隔[t2_1,t2_2]的子集。

library(sqldf)
sqldf('
select  *
from    tbl1
        join tbl2
        on  t1 >= t2_1
            and t2 <= t2_2
')
#           t1        t2 label1       t2_1      t2_2 label2
# 1 0.09657247 0.1452063      j 0.09657247 0.2159882    ja:
# 2 0.14520627 0.2159882     a: 0.09657247 0.2159882    ja:
# 3 0.21598818 0.2948941      c 0.21598818 0.3521566     ci
# 4 0.29489410 0.3521566      i 0.21598818 0.3521566     ci

您也可以使用data.table (與上述結果相同)

data.table選項1:

library(data.table)
setDT(tbl1)
setDT(tbl2)

tbl1[tbl2, on = .(t1 >= t2_1, t2 <= t2_2)
     , .(t1, t2, label1, t2_1, t2_2, label2)]

data.table選項2

setkey(tbl1, t1, t2)
setkey(tbl2, t2_1, t2_2)

foverlaps(tbl1, tbl2, type = 'within')[, .(t1, t2, label1, t2_1, t2_2, label2)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM