Annemarie
Annemarie

Reputation: 123

truncate dataset when variable falls below threshold

I wish to find the day on which variable hb falls below 90 for each record. I can find the day when x=min

f <- function(x) 1:length(x) <= which.min(x)
ind <- as.logical(ave(df$hb, df1$ id, FUN=f))
dfhb <- (df [ind, ])
maxday <- dfhb %>% group_by(id) %>% summarise(daymax = last(day))

However, I can’t get hb<90

f2 <- function(x) 1:length(x) <= which(x<=90)
ind <- as.logical(ave(df$hb, df$id, FUN=f2))
dfhb <- (df [ind, ])
maxday <- dfhb %>% group_by(id) %>% summarise(daymax = last(day))
summary(maxday$daymax)

I would be very grateful for your advice, bw Annemarie

id  day hb
1   1   95
1   2   NA
1   3   91
1   4   89
2   1   98
2   2   87
2   3   84
3   1   89
3   2   92
3   3   89

Upvotes: 0

Views: 48

Answers (1)

Sotos
Sotos

Reputation: 51592

Here is the idea for obtaining the first observed value that satisfies your threshold,

df %>% 
 group_by(id) %>% 
 summarise(daymax = which(hb<90)[1]) 

# A tibble: 3 × 2
#     id daymax
#  <int>  <int>
#1     1      4
#2     2      2
#3     3      1

Upvotes: 1

Related Questions