在 dplyr mutate 中使用 "diff" 函数时出错

Error when using "diff" function inside of dplyr mutate

我尝试 mutate 新专栏到 data.frame。当 V 列顺序从降序变为递增顺序时,我使用 mutate 内的 diff 函数将它们分类到新列 H 中。

V <- c(seq(30,-10,-10),seq(-10,30,10))
gr = rep(seq(1,3),each=10)
df <- data.frame(V,gr)

library(dplyr)    
diff_df <- df%>%
  group_by(gr)%>%
  mutate(H=ifelse(diff(V)<0,"back","forward"))

但是出现错误

Error: incompatible size (9), expecting 10 (the group size) or 1

但是当我这样做时

diff(df$V)

[1] -10 -10 -10 -10 0 10 10 10 10 0 -10 -10 -10 -10 0 10 10 10 10 0 -10 -10 -10 -10 0 10 10 10 10

似乎符合逻辑。为什么我在 dplyr?

内部操作时出现错误

我们需要再连接一个值,使长度等于 diff returns,长度比组的长度小一。即

length(df$V)
#[1] 30
length(diff(df$V))
#[1] 29

因此,我们在开头连接一个虚拟数字以使 length 相等。

 df %>%
   group_by(gr) %>%
   mutate(H=ifelse(c(0,diff(V))<0,"back","forward"))

如果我们需要第一个值是'back',把条件改成<=0