#r #tidyverse
#r #tidyverse
Вопрос:
Я хотел бы присвоить число дням (событиям), значение которых было>0,36. Я хочу идентифицировать с уникальным номером любое событие, которое достигает этого правила (значение> 0,36), предпочтительно с использованием Tidyverse.
library(lubridate)
#create a df
date =as_date(ymd("2020-11-01"):ymd("2020-11-25"))
val = rnorm (25)
data = tibble(date, val)
Кто-нибудь может мне помочь?
Спасибо
Ответ №1:
Существует несколько способов выбора уникальных номеров для идентификации событий, для которых превышено пороговое значение. Кроме того, tidyverse может и не понадобиться — вот базовое решение R. В качестве уникального идентификатора используется индекс значения в val
векторе, превышающего пороговое значение. Все остальные значения, которые ниже порогового значения 0,36, кодируются как 0.
# (a) Initializing the 0s that later identify the non-events
data$flag <- rep(0, nrow(data))
# (b) identifying all values which exceed the threshold with the index
data$flag[which(val > 0.36)] <- which(val > 0.36)
Вывод (на моей машине, случайным образом)
> data
# A tibble: 25 x 3
date val flag
<date> <dbl> <dbl>
1 2020-11-01 0.0231 0
2 2020-11-02 -0.413 0
3 2020-11-03 0.240 0
4 2020-11-04 -0.465 0
5 2020-11-05 -0.929 0
6 2020-11-06 -0.409 0
7 2020-11-07 0.598 7
8 2020-11-08 0.970 8
9 2020-11-09 1.25 9
10 2020-11-10 0.244 0
# ... with 15 more rows