繁体   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