Я хотел бы заменить значения в предыдущей строке (ях) условно на значения в других столбцах.
Это пример моих данных, которые в течение нескольких минут были потрачены на различные действия.
activity <- c("car","soccer","eat","drink")
category <- c("travel","sport","eat/drink","eat/drink")
duration <- c(75,15,10,160)
df <- data.frame(activity, category,duration)
activity category duration
1 car travel 75
2 soccer sport 15
3 eat eat/drink 10
4 drink eat/drink 160
Если в каком-либо ряду продолжительность «питья» составляет> 5 минут (как в строке 4), я хочу заменить «продолжительность» в этом ряду на 5 минут и добавить оставшееся время (в данном случае155 минут) до значения «длительности» в предыдущей строке, ЕСЛИ в предыдущей строке в качестве «категории» не указано «есть / пить», и в этом случае я хочу добавить оставшееся время к «продолжительности» строки перед предыдущей строкой.row ...
В приведенном выше примере я добавил бы 155 минут к "duration" в строке 2. Однако, если в строке 2 также есть "eat / drink" в качестве "категории", я бы хотелдобавьте 155 минут к предыдущему ряду (строка 1).
Спасибо за любую помощь!
До сих пор я пробовал:
df$duration[-nrow(df)] <- ifelse(df$activity[-1]=="drink" & df$duration[-1] > 5,
df$duration + c(df$duration[-1]-5, 0),
df$duration)
, который добавляет 155 минут к предыдущему ряду и дает мне следующее:
activity category duration
1 car travel 75
2 soccer sport 15
3 eat eat/drink 165
4 drink eat/drink 160
и затем я просто заменил продолжительность в строке 4 на 5 минут, например:
df$duration <- ifelse(df$activity =="drink" & df$duration >5,
5,
df$duration)
, что дает мне это ...
activity category duration
1 car travel 75
2 soccer sport 15
3 eat eat/drink 165
4 drink eat/drink 5
Но я не могу понять, как переместить 155 минут в предыдущий ряд (ряд 2), при условии, что в качестве категории не указано «есть / пить».В этом случае я хочу переместить его в строку раньше и т. Д.