【问题标题】:how can I introduce dcast into data.table chain without using piping?如何在不使用管道的情况下将 dcast 引入 data.table 链?
【发布时间】:2019-08-01 13:55:17
【问题描述】:

data.table 在链式规则下优雅而直观。一切都像机器一样排列整齐。但有时我们必须引入一些操作,如dcast 或melt。如何将所有操作集成到[]?只是因为它更优雅,我承认。

DT <- data.table(A = rep(letters[1:3],4), B = rep(1:4,3), C = rep(c("OK", "NG"),6))
DT.1 <- DT[,.N, by = .(B,C)] %>% dcast(B~C)
DT.2 <- DT.1[,.N, by = .(NG)]
#   NG N
#1: NA 2
#2:  3 2

#same
DT <- data.table(A = rep(letters[1:3],4), B = rep(1:4,3), C = rep(c("OK", "NG"),6))[,.N, by = .(B, C)] %>% 
dcast(B~C) %>% .[,.N, by =.(NG)]

我可以删除%&gt;% 并集成到[] 中吗? 谢谢

【问题讨论】:

  • 真的。为了效率起见,我确实喜欢将它们很好地“链接”起来。哈哈

标签: r data.table


【解决方案1】:

为此使用.SD怎么样:

DT[, .N, by = .(B, C)
   ][, dcast(.SD, B ~ C)
     ][, .N, by = .(NG)]

   NG N
1: NA 2
2:  3 2

【讨论】:

  • 是吗?聪明的!我没有想到这个技巧。现在试试!谢谢!
  • 遇到了这个答案,并进一步想知道您如何才能做到这一点,同时还要进行适当的修改?
  • 就地修改...在什么意义上?要将N 列添加到原始data.table 吗?
  • 在示例中忘记链中的最后一步 - 如果您可以将链中第二步的结果分配给 DT
猜你喜欢
  • 2016-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-25
相关资源
最近更新 更多