r-是否有任何方法可以将数据表中的一个给定行与其他行与组进行比较



我想将一个给定的行与数据表中的特定组中的另一行(对于此特定情况第二)中的另一个行进行比较。例如,假设我有以下数据表

>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与第二行Price2中的每一行在第二行= 0之内,这样,如果Price1:127.47至少比非非非非非非非NAS价格在第2列中(组秒= 0),然后将其创建一个以1为1的假人,否则应为0。第二= 0,它应该创建一个虚拟= 0。该过程应针对组中的每个EX进行第二= 0的ex,并且在比较Price2与Price 1的情况下适用相同至少比Price 1中的任何一排在第二= 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      

相关内容

  • 没有找到相关文章

最新更新