这可能是一件微不足道的事情,但我看到了一个奇怪的案例,我想与社区一起验证。
我有一个具有以下尺寸的数据框 $ 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
答案 0 :(得分:0)
我通常使用data.table和下面的代码: 与您编写的dplyr代码相同,但有效。
df[, col := cumsum(status), pid]