У меня есть этот dataframe df1.Обновление столбца на основе предыдущих значений строки
User|Date|Index|
a |1 |1 |
a |1 |2 |
a |1 |3 |
a |1 |0 |
a |1 |5 |
a |1 |6 |
a |2 |0 |
b |4 |1 |
b |4 |2 |
b |4 |3 |
Я хочу, чтобы обновить столбец индекса, следующим образом:
- Group данных по пользователю, дата;
- Предположим, что строки правильно упорядочены;
- Пройдите по столбцу Индекс, когда найдете значение 0, обновите его до 1 и исправьте следующие строки, увеличивая на 1 на основе предыдущей строки, до тех пор, пока не будет найдено другое значение 0.
Я сузил его до этого, но я не уверен, насколько полная часть замены выполняет то, что я хочу.
df1 %>%
group_by(User, Date) %>%
mutate(Index = replace(Index,)
Может кто-нибудь мне помочь?
РЕДАКТИРОВАТЬ: dataframe выше, является упрощение. Это код.
df1 <-structure(list(User = c(2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,3),
Date = c(16864, 16864, 16864, 16864, 16864, 16879, 16879,16879, 16879, 16879, 16879, 16879, 16879, 16879),
Index = c(16,17, 0, 19, 20, 1, 2, 3, 0, 5, 0, 0, 8, 9)),
class = "data.frame", .Names = c("User","Date", "Index"), row.names = c(NA, -14L))
Это текущий вид:
User|Date |Index|
2 |16864 |16 |
2 |16864 |17 |
2 |16864 |0 |
2 |16864 |19 |
2 |16864 |20 |
3 |16879 |1 |
3 |16879 |2 |
3 |16879 |3 |
3 |16879 |0 |
3 |16879 |5 |
3 |16879 |0 |
3 |16879 |0 |
3 |16879 |8 |
3 |16879 |9 |
Нужный выход:
User|Date |Index|
2 |16864 |16 |
2 |16864 |17 |
2 |16864 |1 |
2 |16864 |2 |
2 |16864 |3 |
3 |16879 |1 |
3 |16879 |2 |
3 |16879 |3 |
3 |16879 |1 |
3 |16879 |2 |
3 |16879 |1 |
3 |16879 |1 |
3 |16879 |2 |
3 |16879 |3 |
Можете ли вы показать ожидаемый положил? Также, пожалуйста, [посмотреть эту ссылку] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) и пересмотреть – Sotos
Есть ли причина не просто заменить нули с 1s в качестве первого шага? Если вы заменяете все из них, я не понимаю, почему это нужно делать итеративно. – mkt
Нет особых причин для 0. Думаю, он мог начаться уже как 1. – JessicaJones