gpt4 book ai didi

r - 删除 data.table 中的行,其中列不会更改为前一行

转载 作者:行者123 更新时间:2023-12-02 17:22:07 26 4
gpt4 key购买 nike

我有一个包含 500 万行的 data.table 对象。它可能看起来像这样:

csvdata <- data.table(timestamp = c(1:6),
signal.a=c(12, 12, 13, 12, 12, 14),
signal.b=c(7, 7, 7, 7, 8, 8))

timestamp signal.a signal.b
1 12 7
2 12 7
3 13 7
4 12 7
5 12 8
6 14 8

我想做的是删除表中的每一行,这不会记录任何信号变化。所以我想以这样的结尾:第 2 行被删除,因为 signal.a 和 signal.b 都没有改变。

timestamp  signal.a  signal.b
1 12 7
3 13 7
4 12 7
5 12 8
6 14 8

我在 R 方面的经验很少,所以我尝试了 for 循环的常用方法,目的是将每一行标记为删除,然后过滤掉我想保留的行:

for (i in 1:nrow(csvdata)) {
if (i > 1 && csvdata[i]$signal.a == csvdata[i-1]$signal.a &&
csvdata[i]$signal.b == csvdata[i-1]$signal.b) {
csvdata[i]$Drop <- 1
}
}

该代码似乎可以工作,但是对于 500 万行,该代码需要永远运行(2 小时并且还在增加)。有没有更有效的解决方案?

最佳答案

解决这个问题的一种常见方法是使用 rleid,例如(感谢@Arun 的评论)...

csvdata[!duplicated(rleid(signal.a, signal.b))]

using @eddi's approach ...

csvdata[ csvdata[, .I[1L], by=rleid(signal.a, signal.b)]$V1 ]

关于r - 删除 data.table 中的行,其中列不会更改为前一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41827208/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com