R中的窗口函数:调试cumsum

时间:2017-12-18 19:42:58

标签: r dplyr cumsum

这可能是一件微不足道的事情,但我看到了一个奇怪的案例,我想与社区一起验证。

我有一个具有以下尺寸的数据框     $ pid:num     $ group:chr     $ status:chr ...

df <- tibble::tribble(
   ~pid, ~group,~status,
   12,  "g1",   1,
   12,  "g2",   0,
   18,  "g3",   1,
   18,  "g1",   1,
   18,  "g2",   1
  )

现在,在处理窗口函数时,我需要在每组&#39; pid&#39;上应用cumsum()。所以我使用以下代码

       r2 <- df%>%
          group_by(pid)%>%
          mutate(col = cumsum(status))

我期待r2成为

  pid group status col
 12  g1        1          1
 12  g2        0          1
 18  g3        1          1
 18  g1        1          2
 18  g2        1          3

但是我的结果r2并非如此。相反

  pid group status col
  12  g1        1          1
  12  g2        0          1
  18  g3        1          2
  18  g1        1          3
  18  g2        1          4

对我来说,这似乎并没有创建一个&#39;窗口&#39;在pid列上。我尝试将pid转换为字符但仍然是相同的结果。

如果我对cumsum的理解是正确的,那么这种行为可能是什么原因。

根据包,我在工作区中加载了dplyr,plyr,sqldf,data.table,lubridate

1 个答案:

答案 0 :(得分:0)

我通常使用data.table和下面的代码: 与您编写的dplyr代码相同,但有效。

df[, col := cumsum(status), pid]