在 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
我尝试 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