【问题标题】:How can I skip groups while subsetting with key by in data.table?如何在 data.table 中使用 key by 进行子集时跳过组?
【发布时间】:2016-04-26 15:46:15
【问题描述】:

我有这个 DT:

dt=data.table(ID=c(rep(letters[1:2],each=4),'b'),value=seq(1,9))
   ID value
1:  a     1
2:  a     2
3:  a     3
4:  a     4
5:  b     5
6:  b     6
7:  b     7
8:  b     8
9:  b     9

我需要在子集时消除组,但前提是数据满足某些条件。这样的事情不起作用:

dt[,{if (.N==4) .SD else NULL
     v1},by="ID"]

所以我需要删除不符合条件的组。在此示例中,我想跳过长度不同于 4 的组。这样我得到:

   ID value
1:  a     1
2:  a     2
3:  a     3
4:  a     4

但我无法解决这个问题,我将不胜感激。

【问题讨论】:

  • dt[, if (.N==4) .SD, by="ID"] 能回答你的问题吗?
  • @jangorecki:为什么不发帖?
  • 有一个类似DT[,.SD, by=ID, having={.N == 4L}]github.com/Rdatatable/data.table/issues/788fyi的语法的FR
  • 可以添加他的答案吗?
  • @AldoPareja 添加NULL 的工作原理完全相同(因为这就是省略else 所做的):dt[,if (.N==4) .SD else NULL, by = ID] - 你的表达中唯一的问题是无处不在的v1

标签: r group-by data.table aggregate subset


【解决方案1】:

@jangorecki 想出了答案:

dt[, if (.N==4) .SD, by="ID"] 会回答您的问题吗?

【讨论】:

    猜你喜欢
    • 2015-11-30
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    相关资源
    最近更新 更多