Хотя я думаю, что вы должны хранить ваши данные в длинном формате, здесь приведен код, который вычислит их и вернет обратно в тот широкий формат, который у вас есть.Просто знайте, что часто это не лучший способ для решения проблем, особенно если вы хотите представить данные позже:
library(tidyverse)
dat <- tribble(~"villageID", ~"temp1", ~"temp2", ~"temp3", ~"temp365",
1, 70, 86, 98, 79,
2, 73, 89, 99, 86,
3, 71, 82, 96, 75,
4, 78, 79, 94, 81,
5, 90, 91, 89, 85)
dat %>%
gather(key = "day", value = "temp", -villageID) %>%
group_by(villageID) %>%
mutate(perc_95 = quantile(temp, probs = .95)) %>%
spread(day, temp)
#> # A tibble: 5 x 6
#> # Groups: villageID [5]
#> villageID perc_95 temp1 temp2 temp3 temp365
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 1 96.2 70 86 98 79
#> 2 2 97.5 73 89 99 86
#> 3 3 93.9 71 82 96 75
#> 4 4 92.0 78 79 94 81
#> 5 5 90.8 90 91 89 85
Создано в 2019-02-27 с помощью представпакет (v0.2.1)