добавить столбец, обозначающий окно с определенным временем окончания (но разной длины окна) - PullRequest
1 голос
/ 31 мая 2019

У меня есть data.frame:

       value time
1      1    3
2      2    6
3      3    9
4      4   12
5      5   15
6      6   18
7      7   21
8      8    0
9      9    3
10    10    6
11    11   18
12    12    6

И я хотел бы добавить столбец, обозначающий окно от 6 до следующего значения до 6.Т.е.:

   value time window
1      1    3      3
2      2    6      3
3      3    9      2
4      4   12      2
5      5   15      2
6      6   18      2
7      7   21      2
8      8    0      2
9      9    3      2
10    10    6      2
11    11   18      1
12    12    6      1

Фактическое значение window не имеет значения, если его можно использовать для создания этих групп.

(Если кто-то может придумать лучший заголовок для этого вопроса, во что бы то ни стало, отредактируйте. Это было лучшее, что я мог придумать, но не думаю, что это особенно ясно)

1 Ответ

1 голос
/ 31 мая 2019

Опция будет заключаться в том, чтобы создать логический вектор с rev, равным «времени», сделать кумулятивную сумму и rev срезать результат

library(dplyr)
df1 %>% 
   mutate(window = rev(cumsum(rev(time) == 6)))
#    value time window
#1      1    3      3
#2      2    6      3
#3      3    9      2
#4      4   12      2
#5      5   15      2
#6      6   18      2
#7      7   21      2
#8      8    0      2
#9      9    3      2
#10    10    6      2
#11    11   18      1
#12    12    6      1

Или в base R

df1$window <-  with(df1, rev(cumsum(rev(time) == 6)))

Данные

df1 <- structure(list(value = 1:12, time = c(3L, 6L, 9L, 12L, 15L, 18L, 
21L, 0L, 3L, 6L, 18L, 6L)), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...