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

时间:2016-02-03 05:48:35

标签: r dplyr difference

我尝试将mutate新列添加到data.frame。当V列顺序从递减顺序更改为递增顺序时,我会使用diff内的mutate函数将它们分类到新列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?

内部时遇到错误

1 个答案:

答案 0 :(得分:5)

我们需要连接另一个值以使长度相等,因为diff返回的长度比组的长度小1。即。

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"))

如果我们需要第一个值为&#39;返回&#39;,请将条件更改为<=0