循环置换或numpy.roll()类型函数到dplyr组

时间:2016-03-31 19:46:34

标签: r dplyr

如果我有以下数据:

g in
1 a
1 b
1 c
1 d
2 e
2 f
2 g
2 h

使用g作为组如何使用dplyr创建第二列,其值如下:

g in out
1 a  b
1 b  c
1 c  d
1 d  a
2 e  f
2 f  g
2 g  h
2 h  e

这是一个roll()或permutation,它取第一行并将其放在最后。我已经使用标准评估函数尝试了c(),tail / head内的超前/滞后,矢量切片的组合。我或者得到没有这样的期望排列,NAs(我不想要),或者从因子到int的类型转换。

1 个答案:

答案 0 :(得分:3)

我们可以将leaddefault一起用作“In”的first

library(dplyr)
df1 %>% 
    group_by(g) %>% 
    mutate(Out=dplyr::lead(In, default=first(In)))
#       g    In   Out
#  (int) (chr) (chr)
#1     1     a     b
#2     1     b     c
#3     1     c     d
#4     1     d     a
#5     2     e     f
#6     2     f     g
#7     2     g     h
#8     2     h     e

注意:我将列名从“in”更改为“In”,因为在mutate内调用时可能会造成一些麻烦。