gpt4 book ai didi

删除 data.table 中的范围

转载 作者:行者123 更新时间:2023-12-04 08:36:32 25 4
gpt4 key购买 nike

我试图从数据表中排除一些行,比如,天和月 - 不包括例如暑假,总​​是从 6 月 15 日开始到下个月 15 日结束。我可以根据日期提取这些天数,但由于 as.Date 函数操作起来非常慢,我有单独的月份和日期整数列,我想只使用它们来做。

很容易选择给定的条目

DT[Month==6][Day>=15]
DT[Month==7][Day<=15]

有什么办法可以使两者“不同” data.tables (原始的和我选择的那些)。 (为什么不是子集?也许我遗漏了一些简单的东西,但我不想排除像 10/6、31/7 这样的日子。)

我知道一种通过 join 来做到这一点的方法,但只是一天一天
setkey(DT, Month, Day)
DT[-DT[J(Month,Day), which= TRUE]]

任何人都可以帮助如何以更一般的方式解决它?

最佳答案

很好的问题。我已经编辑了问题标题以匹配问题。

避免 as.Date 的简单方法读起来很好:

DT[!(Month*100L+Day) %between% c(0615L,0715L)]

在许多情况下,这可能已经足够快了。如果您有很多不同的范围,那么您可能需要提高档位:
DT[,mmdd:=Month*100L+Day]
from = DT[J(0615),mult="first",which=TRUE]
to = DT[J(0715),mult="first",which=TRUE]
DT[-(from:to)]

这有点长而且容易出错,因为它是 DIY。所以一个想法是 list i 中的列表将表示范围查询( FR#203 ,就像二分搜索 %between% )。然后可以将未加入(也尚未实现, FR#1384 )与列表列范围查询结合起来完全按照您的要求执行:
setkey(DT,mmdd)
DT[-J(list(0615,0715))]

以通常的方式,这将扩展到多个不同的范围,或许多不同 id 的相同范围;即,更多行添加到 i .

关于删除 data.table 中的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13017521/

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