【问题标题】:Window functions in R : Debugging cumsum [duplicate]R中的窗口函数:调试cumsum [重复]
【发布时间】:2017-12-18 19:42:57
【问题描述】:

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

我有一个具有以下维度的数据框 $pid : 数字 $组:chr $status : chr...

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

现在在处理窗口函数时,我需要在每组“pid”上应用 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

在我看来,这并没有在 pid 列上创建一个“窗口”。我尝试将 pid 转换为字符,但结果仍然相同。

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

就软件包而言,我的工作区中加载了 dplyr、plyr、sqldf、data.table、lubridate

【问题讨论】:

  • statuscharacter 还是 numeric 向量?应该是数字,但似乎是问题中的字符。
  • 我的错...状态是一个整数。数据中还有一些其他列与问题无关
  • group_by 不能有空格,否则这会给我正确的结果。也许发布您的数据的dput;里面可能有一些奇怪的东西
  • 请通过在问题中显示来自dput(df) 的输出来使输入可重现。
  • 可能您在dplyr 之后加载了plyr 并忽略了警告,因此使用plyr::mutate 而不是dplyr::mutate。要验证,请尝试显式使用dplyr::mutate 或检查"mutate" %in% conflicts()

标签: r dplyr cumsum


【解决方案1】:

我一般使用data.table,代码如下: 与您编写的 dplyr 代码的想法相同,但有效。

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

【讨论】:

  • 这行得通,但我更担心为什么 dplyr 方法不起作用,现在让我的订购正确
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
  • 2013-02-06
  • 2016-04-18
相关资源
最近更新 更多