2

我正在使用 R 中的大型数据表,并尝试遍历整个表并根据单独列中前一行的值设置给定列中的行值。

我试图在一个有 200K 行的表上运行这个循环,它的移动非常缓慢。我怀疑我没有利用所有 data.table 的效率,但不知道我可以在哪里改进。

我的代码在下面。我的表是“DATA”,我的键是“x”和“y”列,我试图遍历所有行并将第 6 列中的行的值设置为 1 ,前提该行在第 2 列中的值不是等于第 2 列中前一行的值。

setkey(DATA,x,y)
for (i in 2:nrow(DATA)) {

    if (DATA[i,2]!=DATA[i-1,2]){
        DATA[i, 6] = 1
    }

}

同样,这有效,但对于大型表来说非常慢。任何帮助将不胜感激 - 谢谢!

4

2 回答 2

7

在没有看到数据的情况下,这是一个刺(不使用data.table):

DATA[c(0, diff(DATA[,2]))!=0, 6] <- 1

如果第一行被认为“不相等”:

DATA[c(1, diff(DATA[,2]))!=0, 6] <- 1
于 2013-01-26T16:55:18.727 回答
3

想想向量,而不是循环:

DATA[,6] <- c(0,as.numeric(diff(DATA[,2]) != 0))

我在第一行放了 0,因为我不知道该放什么,但如果更合适,您可以将其更改为其他内容。

于 2013-01-26T16:55:24.867 回答