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


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!