gpt4 book ai didi

从 R 中的 data.table 有条件地删除行

转载 作者:行者123 更新时间:2023-12-03 07:59:39 25 4
gpt4 key购买 nike

我有一个带有 {id, menuitem, amount} 字段的 data.table。

这是交易数据 - 因此,id 是唯一的,但 menuitem 重复。现在,我想删除所有条目 menuitem == 'coffee' .

另外,要删除amount <= 0 所在的所有行;

在 data.table 中执行此操作的正确方法是什么?

我可以用 data$menuitem!='coffee'然后将 int 索引到 data[] - 但这不一定有效并且没有利用 data.table。

任何指向正确方向的指针都值得赞赏。

最佳答案

在这种情况下,它与 data.frame 没有太大不同。

data <- data[ menuitem != 'coffee' | amount > 0] 

通过引用删除/添加行它是要实现的。您可以在 this question 中找到更多信息

关于速度:

1 您可以通过执行以下操作从 key 中受益:
setkey(data, menuitem)
data <- data[!"coffee"]

这将比 data <- data[ menuitem != 'coffee'] 快.但是,要应用您在问题中提出的相同过滤器,您需要滚动连接(我已经完成了午休时间,我可以稍后添加一些内容:-))。

2 即使没有关键 data.table 对于相对较大的表来说也快得多(少量行的速度相似)
dt<-data.table(id=sample(letters,1000000,T),var=rnorm(1000000))
df<-data.frame(id=sample(letters,1000000,T),var=rnorm(1000000))
library(microbenchmark)
> microbenchmark(dt[ id == "a"], df[ df$id == "a",])
Unit: milliseconds
expr min lq median uq max neval
dt[id == "a"] 24.42193 25.74296 26.00996 26.35778 27.36355 100
df[df$id == "a", ] 138.17500 146.46729 147.38646 149.06766 154.10051 100

关于从 R 中的 data.table 有条件地删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22655060/

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