簡體   English   中英

有沒有辦法將數據表中的一個給定行與一組中的其他行進行比較?

[英]Is there any way to compare one given row in a data table with other rows withing a group?

我想將一個給定的行與數據表中特定組內的另一列中的每一行(對於這個特定情況第二個)進行比較。 例如假設我有以下數據表

>dt<- data.table(bSIDE = c(0,0,0,0,1,1,1,1,0,0),
            EX = c(1,3,9,14,1,3,5,14,1,2),
            second=c(0,0,0,0,0,0,0,0,1,1),
            PRICE1=c(NA,NA,NA,NA,127.47,127.47,127.47,127.47,NA,NA),
       PRICE2=c(127.49,127.48,127.58,127.46,NA,NA,NA,NA,127.48,127.48))

我想將組 second=0 和 EX=1 中 PRICE1 列中的第一行與 second=0 內 PRICE2 列中的每一行進行比較,這樣如果 PRICE1: 127.47 比非 NAs 中的價格至少大一次第 2 列(在組 second=0 內),那么它應該創建一個值為 1 的虛擬對象,否則應該取值為 0。在這種情況下,這個條件永遠不會被填充,所以對於秒內的 EX1=0 ,它應該創建一個 dummy=0。 應該對組 second=0 中的每個 EX 執行此過程。當將 PRICE2 與 PRICE1 進行比較時,同樣適用,但在這種情況下,條件相反,如果 second=0 內給定 EX 的 PRICE2 較低至少比 PRICE1 中的任何行在 second=0 內創建一次,否則它應該創建一個值為 1 和 0 的虛擬對象。 因此,我想得到以下內容:

> objective<- data.table(bSIDE = c(0,0,0,0,1,1,1,1,0,0),
            EX = c(1,3,9,14,1,3,5,14,1,2),
            second=c(0,0,0,0,0,0,0,0,1,1),
            PRICE1=c(NA,NA,NA,NA,127.47,127.47,127.47,127.47,NA,NA),
        PRICE2=c(127.49,127.48,127.58,127.46,NA,NA,NA,NA,127.48,127.48), 
            dPRICE1=c(NA, NA, NA, NA, 0, 0, 0, 0, NA, NA), 
            dPRICE2=c(0,0,0,1, NA, NA, NA, NA, NA, NA)
            )

我對這個問題有一個潛在的解決方案,但它在內存方面非常“昂貴”。 解決方案是為 bSIDE 組中的每個交換創建一列,然后逐行比較。 這個解決方案消耗了大量內存,我不希望這樣,因為數據表可能會達到 900 萬個觀察值。

謝謝!

我不能說我真的理解你的“規則”; 您的數據格式非常奇怪,我建議退后一步重新考慮前者,因為這對我來說聽起來像是XY 問題 您的數據不知何故具有混合的長寬數據格式。

除此之外,以下內容重現了您的預期輸出。 我並沒有聲稱這可以概括您的更大問題,但也許它會讓您開始。

dt[, `:=`(
    dPRICE1 = +(first(PRICE2[EX == 1 & !is.na(PRICE2)]) < PRICE1),
    dPRICE2 = +(first(PRICE1[EX == 1 & !is.na(PRICE1)]) > PRICE2)),
    by = second]
#    bSIDE EX second PRICE1 PRICE2 dPRICE1 dPRICE2
# 1:     0  1      0     NA 127.49      NA       0
# 2:     0  3      0     NA 127.48      NA       0
# 3:     0  9      0     NA 127.58      NA       0
# 4:     0 14      0     NA 127.46      NA       1
# 5:     1  1      0 127.47     NA       0      NA
# 6:     1  3      0 127.47     NA       0      NA
# 7:     1  5      0 127.47     NA       0      NA
# 8:     1 14      0 127.47     NA       0      NA
# 9:     0  1      1     NA 127.48      NA      NA
#10:     0  2      1     NA 127.48      NA      NA      

暫無
暫無

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

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