Переназначение значений столбцов в группах переменных

#r #dataframe

#r #фрейм данных

Вопрос:

У меня есть этот конкретный фрейм данных, и я хотел бы провести некоторые манипуляции с ним. В принципе, я хочу расположить значения в шахматном порядке таким образом, чтобы каждая запись в столбце зарплата перемещалась вверх, заменяя зарплату за предыдущий сезон.

Как мне это сделать? через iloc или? Если нет записи предыдущего сезона, я бы хотел оставить ее нетронутой (см. Строку 3).

Входной фрейм данных:

    season                       url  salary
1 2016-17 /players/a/abrinal01.html 5994764
2 2017-18 /players/a/abrinal01.html 5725000
3 2008-09 /players/a/ackeral01.html  711517
4 2012-13   /players/a/acyqu01.html  665000
5 2013-14   /players/a/acyqu01.html  788872
6 2014-15   /players/a/acyqu01.html  915243
  

Выходной фрейм данных:

    season                       url  salary
1 2016-17 /players/a/abrinal01.html 5725000
2 2017-18 /players/a/abrinal01.html    NA
3 2008-09 /players/a/ackeral01.html  711517
4 2012-13   /players/a/acyqu01.html  788872
5 2013-14   /players/a/acyqu01.html  915243
6 2014-15   /players/a/acyqu01.html    NA
  

Ответ №1:

Мы можем использовать lead from, dplyr предполагая season , что значения упорядочены так, как показано в примере

 library(dplyr)

df1 %>%
  group_by(url) %>%
  mutate(salary = if (n() > 1) lead(salary) else salary)

#   season  url                        salary
#  <fct>   <fct>                       <int>
#1 2016-17 /players/a/abrinal01.html 5725000
#2 2017-18 /players/a/abrinal01.html      NA
#3 2008-09 /players/a/ackeral01.html  711517
#4 2012-13 /players/a/acyqu01.html    788872
#5 2013-14 /players/a/acyqu01.html    915243
#6 2014-15 /players/a/acyqu01.html        NA