【问题标题】:How to filter data.table conditionally in R如何在 R 中有条件地过滤 data.table
【发布时间】:2018-07-29 02:43:51
【问题描述】:

我在 R 中的 data.table 的两列中进行操作。我首先按 DATE、按 1 分钟和按 EX 过滤了数据表,但后来我意识到我实际上不希望 1 分钟内的数据.我想要那个垃圾箱之前的所有东西。

我之前有的是:

bid_ask <- new_file[,list(btail=tail(BID,n=1),atail=tail(ASK,n=1)), by=c("DATE","by1min","EX")]

现在我想做这样的事情:

bid_ask <- new_file[,list(btail=tail(BID,n=1),atail=tail(ASK,n=1)), by=c("DATE",TIME_M[TIME_M<by1min],"EX")]

但这似乎不是 data.table 的结构。

有人知道如何在“by”中进行条件过滤吗?

我的数据如下所示:

         DATE   TIME_M EX SYM_SUFFIX   BID   ASK by1min
1: 2016-03-01 14400.02  P         NA 60.00 95.00  14400
2: 2016-03-01 24889.07  T         NA 60.01 65.00  24840
3: 2016-03-01 24889.25  T         NA 60.01 64.99  24840
4: 2016-03-01 25085.24  T         NA 60.01 64.99  25080
5: 2016-03-01 25085.36  T         NA 62.50 64.99  25080
6: 2016-03-01 25103.37  T         NA 62.51 64.99  25080

【问题讨论】:

  • 嗨@python_newbie - 不知道你的data.table是什么样子就不可能帮助你。请查看stackoverflow.com/questions/5963269/… 并更新您的问题。
  • 对不起...我已经添加了数据。我想做的是获得每个交易所的最后发布的出价/要价,直到一分钟的阈值。但是我很难使用“by”。如您所见,我可以过滤“在”1 分钟垃圾箱内,但不能“直到”1 分钟垃圾箱
  • 你想如何过滤你的数据?预期的最终结果是什么?
  • 是你写的代码运行不起来的问题吗?您发布的数据结构不是data.table,它看起来像dplyr 代码生成的tibble。您应该能够通过运行as.data.table(new_file)as.data.table(as.data.frame(new_file)) 将其转换为data.table
  • 我将数据更新为 data.table,而不是之前的数据。我想按“日期”过滤数据,然后按低于 1 分钟阈值的所有内容(例如,

标签: r filter data.table conditional


【解决方案1】:

语法是这样的:

bid_ask <- new_file[, list(btail=tail(BID, n=1),atail=tail(ASK, n=1)), by=.(DATE, TIME_M < by1min, EX)]
bid_ask 
#         DATE TIME_M EX btail atail
#1: 2016-03-01  FALSE  P 60.00 95.00
#2: 2016-03-01  FALSE  T 62.51 64.99
#3: 2016-03-01   TRUE  T 62.51 64.99
#4: 2016-03-01   TRUE  P 60.00 95.00

来自?data.table 文档:

接受:

  • 列名表达式的 list():例如 DT[, .(sa=sum(a)), by=.(x=x>0, y)]

样本数据:

dat <- fread("DATE   TIME_M EX SYM_SUFFIX   BID   ASK by1min
2016-03-01 14400.02  P         NA 60.00 95.00  14400
2016-03-01 24889.07  T         NA 60.01 65.00  24840
2016-03-01 24889.25  T         NA 60.01 64.99  24840
2016-03-01 25085.24  T         NA 60.01 64.99  25080
2016-03-01 25085.36  T         NA 62.50 64.99  25080
2016-03-01 25103.37  T         NA 62.51 64.99  25080
2016-03-01 25000  T         NA 62.51 64.99  25080
2016-03-01 14399  P         NA 60.00 95.00  14400")

【讨论】:

  • 我试过这个,但它给了我一个有点奇怪的结果。 btail 和 atail 的数字都相同。
  • 你能dput你的数据吗?
猜你喜欢
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 2014-04-20
  • 2021-11-25
  • 2019-07-27
  • 2014-05-04
  • 1970-01-01
  • 2016-03-19
相关资源
最近更新 更多