Итак, я пытаюсь найти способ рассчитать ecdf для конкретных значений моих данных. У меня есть фрейм данных, который выглядит примерно так:
Name Type Value
B pace_20min_ms 6M 2S
A pace_20min_ms 5M 32S
Итак, что я хочу сделать: найти значение ecdf, например, для A и сказать: A быстрее, чем у 65% людей, прошедших тест. Но я борюсь с «Значением», так как оно в этом смазочном формате «Минуты и секунды».
На данный момент я понял, как рассчитать конкретные квантили:
quantile(dat$Value, probs = c(0.1, 0.25, 0.5, 0.75, 0.9), type = 1)
[1] "3M 57S" "4M 25S" "4M 56S" "5M 32S" "6M 2S"
Может быть, не так уж и сложно посчитать наоборот, но я не знаю, как это сделать. Большое спасибо!
Я попробовал, и кажется, что для каждого значения выдаются только 0, но я не знаю, правильно ли я его использовал.





Вы можете конвертировать в секунды и обратно, например:
> r <- colSums(sapply(strsplit(gsub('[MS]', '', x), ' '), as.integer)*c(60, 1)) |>
+ quantile(probs=c(0.1, 0.25, 0.5, 0.75, 0.9), type=1)
> sprintf('%sM %sS', r %/% 60, r %% 60) |> setNames(names(r))
10% 25% 50% 75% 90%
"0M 20S" "1M 23S" "3M 24S" "5M 5S" "6M 31S"
Не уверен, как именно отформатированы ваши данные, но идею вы поняли.
Данные:
> n <- 100
> set.seed(42)
> x <- mapply(\(x, y) sprintf('%sM %sS', x, y),
+ sample(0:7, n, replace=TRUE),
+ sample(0:34, n, replace=TRUE))
Спасибо!! Как-то я сам об этом не подумал, но получилось!
ecdf()не работает для смазывания форматов времени? У меня не установлена смазка, чтобы можно было легко проверить.