Я пытаюсь написать небольшой цикл for в R, который беспокоит меня.
Мои данные имеют следующую структуру (с тысячами записей):
City Street Time Name Value
1 New York Street1 Week 1 John 0
2 New York Street1 Week 2 John 0
3 New York Street1 Week 3 James 0
4 New York Street1 Week 3 James 5
5 New York Street2 Week 4 Kate 0
6 New York Street2 Week 4 Kate 3
7 New York Street4 Week 7 Kate 0
8 New York Street4 Week 8 Kate 0
9 New York Street4 Week 9 John 0
10 Boston Street1 Week 1 James 0
11 Boston Street1 Week 2 James 0
12 Boston Street1 Week 3 John 0
13 Boston Street1 Week 4 Kate 0
14 Boston Street1 Week 5 John 0
15 Boston Street1 Week 6 Kate 0
16 Boston Street1 Week 7 Kate 0
17 Boston Street1 Week 8 James 0
18 Boston Street1 Week 9 James 0
19 Boston Street1 Week 10 Kate 2
20 Boston Street5 Week 11 John 0
21 Boston Street5 Week 12 Kate 3
22 Boston Street5 Week 13 Kate 0
Я пытаюсь найтипервую неделю с ненулевым значением в каждой комбинации город / улица, затем удалите все имена до этого вхождения для этой конкретной комбинации город / улица и перейдите к следующей комбинации город / улица.
Я думаю, что мой вывод должен выглядеть следующим образом.
City Street Time Name Value
1 New York Street1 Week 1 - 0
2 New York Street1 Week 2 - 0
3 New York Street1 Week 3 - 0
4 New York Street1 Week 3 James 5
5 New York Street2 Week 4 - 0
6 New York Street2 Week 4 Kate 3
7 New York Street4 Week 7 Kate 0
8 New York Street4 Week 8 Kate 0
9 New York Street4 Week 9 John 0
10 Boston Street1 Week 1 - 0
11 Boston Street1 Week 2 - 0
12 Boston Street1 Week 3 - 0
13 Boston Street1 Week 4 - 0
14 Boston Street1 Week 5 - 0
15 Boston Street1 Week 6 - 0
16 Boston Street1 Week 7 - 0
17 Boston Street1 Week 8 - 0
18 Boston Street1 Week 9 - 0
19 Boston Street1 Week 10 Kate 2
20 Boston Street5 Week 11 - 0
21 Boston Street5 Week 12 Kate 3
22 Boston Street5 Week 13 Kate 0
Я пробовал простой цикл for, но он циклически перебирает номера строк без названий городов / улиц.
Не могли бы вы помочь?
Данные
my_data <-
structure(list(City = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Boston",
"New York"), class = "factor"), Street = structure(c(1L, 1L,
1L, 1L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 4L, 4L, 4L), .Label = c("Street1", "Street2", "Street4",
"Street5"), class = "factor"), Time = structure(c(1L, 6L, 7L,
7L, 8L, 8L, 11L, 12L, 13L, 1L, 6L, 7L, 8L, 9L, 10L, 11L, 12L,
13L, 2L, 3L, 4L, 5L), .Label = c("Week 1", "Week 10", "Week 11",
"Week 12", "Week 13", "Week 2", "Week 3", "Week 4", "Week 5",
"Week 6", "Week 7", "Week 8", "Week 9"), class = "factor"), Name = structure(c(2L,
2L, 1L, 1L, 3L, 3L, 3L, 3L, 2L, 1L, 1L, 2L, 3L, 2L, 3L, 3L, 1L,
1L, 3L, 2L, 3L, 3L), .Label = c("James", "John", "Kate"), class = "factor"),
Value = c(0L, 0L, 0L, 5L, 0L, 3L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 2L, 0L, 3L, 0L)), class = "data.frame", row.names = c(NA,
-22L))
expected_output <-
structure(list(City = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Boston",
"New York"), class = "factor"), Street = structure(c(1L, 1L,
1L, 1L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 4L, 4L, 4L), .Label = c("Street1", "Street2", "Street4",
"Street5"), class = "factor"), Time = structure(c(1L, 6L, 7L,
7L, 8L, 8L, 11L, 12L, 13L, 1L, 6L, 7L, 8L, 9L, 10L, 11L, 12L,
13L, 2L, 3L, 4L, 5L), .Label = c("Week 1", "Week 10", "Week 11",
"Week 12", "Week 13", "Week 2", "Week 3", "Week 4", "Week 5",
"Week 6", "Week 7", "Week 8", "Week 9"), class = "factor"), Name = structure(c(2L,
2L, 1L, 1L, 3L, 3L, 3L, 3L, 2L, 1L, 1L, 2L, 3L, 2L, 3L, 3L, 1L,
1L, 3L, 2L, 3L, 3L), .Label = c("James", "John", "Kate"), class = "factor"),
Value = c(0L, 0L, 0L, 5L, 0L, 3L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 2L, 0L, 3L, 0L)), class = "data.frame", row.names = c(NA,
-22L))