Return R 中的第 90 个百分位值

Return the 90th percentile values in R

例如,我有一个城市 30 年气温的数据集,数据集如下所示:

Year  Julian_date  temperature
1991    1             2.1
1991    2             2.2
...     ...           ...
1991    365           2.3
1992    1             2.1
...     ...           ...
1992    365           2.5
...     ...           ...
2020    366           2.5

我想计算每个儒略日期(来自不同年份)的第 90 个百分位值,并返回结果,例如:

Julian_date        value(the 90th percentile)
1                  2.4
2                  2.6
...                ...
365                2.5

r中的代码应该怎么写?

可以先按Julian_date分组,然后用quantile函数设置summarise内的概率。

library(tidyverse)

df %>% 
  group_by(Julian_date) %>% 
  summarise("value (the 90th percentile)" = quantile(temperature, probs=0.9, na.rm=TRUE))

输出

  Julian_date `value (the 90th percentile)`
        <int>                         <dbl>
1           1                           2.1
2           2                           2.2
3         365                           2.5

数据

df <- structure(list(Year = c(1991L, 1991L, 1991L, 1992L, 1992L, 2020L
), Julian_date = c(1L, 2L, 365L, 1L, 365L, 365L), temperature = c(2.1, 
2.2, 2.3, 2.1, 2.5, 2.5)), class = "data.frame", row.names = c(NA, 
-6L))

您可以使用quantile()功能。如果您问题中的 (from different years) 意味着每年应该有单独的计算,那么您需要按 YearJulian_date 对数据框进行分组。相反,如果这意味着不同年份组合在一起,则您需要仅按 Julian_date 对数据框进行分组,如 @AndrewGB 和 @benson23 所示。

library(dplyr)
yourdf %>% group_by(Year, Julian_date) %>% 
summarise (value_90th_percentile = quantile(temperature, 0.9, na.rm = TRUE))