2016-03-31 2 views
1

Если у меня есть данные, такие как:циклической перестановкой или numpy.roll() типа функции к группе dplyr

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

с г быть группой Как можно использовать 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 

Это рулон() или перестановка, которая берет первый ряд и помещает его в конец. Я пробовал комбинации свинца/запаздывания, векторные срезы внутри c(), хвост/голова, используя стандартные функции оценки. Я либо не получаю такой желаемой перестановки, NA (которой я не хочу), либо преобразования типа из коэффициента в int.

ответ

3

Мы можем использовать lead с default как 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 

ПРИМЕЧАНИЕ: Я изменил имя столбца «в» до «В», как это может создать некоторые проблемы при звонке в mutate ,

+2

wow thanks! Я не использовал dplyr :: version и не знал о аргументе по умолчанию. – Joe

Смежные вопросы