问题
I try to mutate
new column to data.frame. When V
column order changes from decreasing to increasing order, I use diff
function inside of mutate
to categorize them in new column 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"))
However getting error
Error: incompatible size (9), expecting 10 (the group size) or 1
But when I do
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
seems to be working logically. Why I'm getting error when I do inside of dplyr?
回答1:
We need to concatenate with one more value to make the length equal as diff
returns with a length one less than the length of the group. i.e.
length(df$V)
#[1] 30
length(diff(df$V))
#[1] 29
So, we concatenate with a dummy number at the beginning to make the length
equal.
df %>%
group_by(gr) %>%
mutate(H=ifelse(c(0,diff(V))<0,"back","forward"))
If we need the first value to be 'back', change the condition to <=0
来源:https://stackoverflow.com/questions/35169423/error-when-using-diff-function-inside-of-dplyr-mutate