如果我有以下数据:
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的类型转换。
答案 0 :(得分:3)
我们可以将lead
与default
一起用作“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
内调用时可能会造成一些麻烦。