J'ai un ensemble de données qui ressemble à ceci:
result<-df %>% group_by(unique.id) %>% filter(dailyMyoActivity < globaltma[globalflareday==1])
Je voudrais identifier la première ligne de chaque groupe ( unique
) où le le score
est inférieur à la valeur
le jour
1.
J'ai essayé ceci:
unique score value day 1 2 52 33.75 1 2 2 39 36.25 2 3 3 47 41.25 1 4 3 26 41.00 2 5 3 17 32.25 3 6 3 22 28.00 4 7 3 11 19.00 5 8 3 9 14.75 6 9 3 20 15.50 7 10 4 32 18.00 1 11 4 20 20.25 2 12 5 32 26.00 1 13 5 31 28.75 2 14 5 25 27.00 3 15 5 27 28.75 4 16 6 44 31.75 1 17 6 25 30.25 2 18 6 31 31.75 3 19 6 37 34.25 4 20 6 28 30.25 5
4 Réponses :
Cela pourrait aider:
library(dplyr) df %>% group_by(unique) %>% mutate(Index=ifelse(score<value & day==1,1,0)) # A tibble: 20 x 5 # Groups: unique [5] unique score value day Index <int> <int> <dbl> <int> <dbl> 1 2 52 33.8 1 0 2 2 39 36.2 2 0 3 3 47 41.2 1 0 4 3 26 41 2 0 5 3 17 32.2 3 0 6 3 22 28 4 0 7 3 11 19 5 0 8 3 9 14.8 6 0 9 3 20 15.5 7 0 10 4 32 18 1 0 11 4 20 20.2 2 0 12 5 32 26 1 0 13 5 31 28.8 2 0 14 5 25 27 3 0 15 5 27 28.8 4 0 16 6 44 31.8 1 0 17 6 25 30.2 2 0 18 6 31 31.8 3 0 19 6 37 34.2 4 0 20 6 28 30.2 5 0
Ensuite, vous filtrez par Index==1
Si j'ai bien compris votre raisonnement et si votre ensemble de données est déjà commandé d'ici le jour
, cette solution dplyr
peut être utile
# A tibble: 3 x 4 # Groups: unique [3] # unique score value day # <int> <int> <dbl> <int> # 1 3 26 41 2 # 2 5 25 27 3 # 3 6 25 30.2 2
Sortie
library(dplyr) df %>% group_by(unique) %>% filter(score < value[day==1]) %>% slice(1)
Étant donné que vous avez demandé d'identifier la première ligne qui remplit le critère score
result <- df %>%
mutate(row_nr = row_number()) %>%
group_by(unique) %>%
filter(score < value) %>%
slice(1)
p>
Nous pourrions également utiliser slice
df1 <- structure(list(unique = c(2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L), score = c(52L, 39L, 47L, 26L, 17L, 22L, 11L, 9L, 20L, 32L, 20L, 32L, 31L, 25L, 27L, 44L, 25L, 31L, 37L, 28L), value = c(33.75, 36.25, 41.25, 41, 32.25, 28, 19, 14.75, 15.5, 18, 20.25, 26, 28.75, 27, 28.75, 31.75, 30.25, 31.75, 34.25, 30.25), day = c(1L, 2L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 5L)), class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20"))
library(dplyr) df1 %>% group_by(unique) %>% slice(which(score < value[day == 1])[1]) # A tibble: 3 x 4 # Groups: unique [3] # unique score value day # <int> <int> <dbl> <int> #1 3 26 41 2 #2 5 25 27 3 #3 6 25 30.2 2