我尝试 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?
里面做时会出错
请您参考如下方法:
我们需要再连接一个值以使长度等于 diff
返回的长度比组的长度小 1。 IE。
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