我尝试将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?
答案 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