【发布时间】:2021-02-05 07:35:25
【问题描述】:
我正在尝试将一个函数应用于数据框以添加一个列,该列根据气象站 ID (WSID) 和季节分组计算每条记录的百分位排名。
## temperatures data frame:
WSID Season Date Temperature
20 Summer 24/01/2020 18
12 Summer 25/01/2020 20
20 Summer 26/01/2020 25
12 Summer 27/01/2020 17
20 Winter 18/10/2020 15
12 Winter 19/10/2020 12
12 Winter 20/10/2020 13
12 Winter 21/10/2020 14
## Code tried:
perc.rank <- function(x) trunc(rank(x))/length(x)
rank.perc = function(mdf) {
combined1 = mdf %>%
mutate(percentile = perc.rank(Temperature))
}
temperatures = temperatures %>%
split(.$WSID) %>%
map_dfr(~rank.perc(.))
## Expected Output :
WSID Season Date Temperature Percentile
20 Summer 24/01/2020 18 0.333
12 Summer 25/01/2020 20 0.444
20 Summer 26/01/2020 25 0.666
12 Summer 27/01/2020 17 0.333
20 Winter 18/10/2020 15
12 Winter 19/10/2020 12
12 Winter 20/10/2020 13
12 Winter 21/10/2020 14
是否有一些优雅的方法可以使用诸如 group_modify、group_split、map 和/或 split 之类的函数来做到这一点? 我在想应该有,例如,如果有 3 个或更多级别的分组因子。
当我按 WSID 拆分数据时,该代码适用,但当我还想按 WSID + 季节分组时,我似乎无法获得任何进一步的信息。
(填入的百分位数值由Excel百分位等级函数计算得出)
【问题讨论】:
-
抱歉,这是我在 Stack Overflow 上的第一篇文章,所以我只是习惯了语法。我现在已经更新了我的帖子。希望现在更清晰,更容易理解。