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