【问题标题】:Using group_by() in dplyr for certain number of rows在 dplyr 中对特定行数使用 group_by()
【发布时间】:2016-02-23 02:20:23
【问题描述】:

在 dplyr 中,有没有办法使用 group_by() 而不是变量,而是按特定行数分组?我将 SQLite 与 dplyr 一起使用,但我认为 SQLite 没有窗口功能。

【问题讨论】:

  • 最好提供可重现的示例 - 最少的输入数据和预期的输出。
  • group_by 的要点是按变量分组,因此如果没有该变量,则否,但您可以使用 mutate 根据您的行数为每一行添加一个 id想要然后 group_by
  • 您也可以使用 dplyr 进行“即时”分组:DT %>% group_by(g = rep(1:18, each = 140)) %>% summarise(m = mean(VAR)) 使用 Michael 的示例数据。
  • @docendodiscimus 谢谢,我以为是这样,但是,就像我的西班牙语一样,我的阅读比写作要好得多dplyr;我已将您的答案添加到我的答案中,以便对潜在的未来谷歌员工具有中心地位。

标签: r sqlite dplyr


【解决方案1】:

您只想即时分组,这意味着将 ad hoc 变量传递给分组器。

data.table 中,这将通过在by 中使用rep 来完成:

library(data.table)
set.seed(01394)
DT <- data.table(VAR = rnorm(2520))

DT[ , mean(VAR), by = rep(1:18, each = 140)]
#     rep           V1
#  1:   1  0.029683200
#  2:   2  0.150411987
#  3:   3  0.061912697
#  4:   4 -0.014229183
#  5:   5 -0.007305455
#  6:   6  0.003784550
#  7:   7  0.010941501
#  8:   8  0.032129151
#  9:   9 -0.036524921
# 10:  10  0.046986451
# 11:  11  0.075547228
# 12:  12 -0.079538420
# 13:  13 -0.099833001
# 14:  14 -0.065297462
# 15:  15 -0.020778063
# 16:  16  0.095983764
# 17:  17  0.095292230
# 18:  18  0.150405148

根据@docendodecimus,dplyr 等效项是:

DT %>% group_by(g = rep(1:18, each = 140)) %>% summarise(m = mean(VAR))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-12
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 2019-12-06
    相关资源
    最近更新 更多