假设我有以下数据:
id grpvar1 grpvar2 value
1 1 3 7.6
2 1 2 4
...
3 1 5 2
对于每个id
,我想计算其在由grpvar1
和grpvar2
组合定义的组内value
百分比排名percent_rank()
。使用
data.table
,我会这样做(假设我的数据在名为dataf
的data.frame
中):library(data.table)
# Make dataset into a data.table.
dt <- data.table(dataf)
# Calculate the percentiles.
dt[, percrank := rank(value)/length(value), by = c("grpvar1", "grpvar2")]
在dplyr
中,相当于什么?
dataf %>% group_by(grpvar1, grpvar2) %>% mutate(percrank=rank(value)/length(value))
这段代码会给出与使用data.table
时展示的输出相同的结果。 - akrundplyr::percent_rank()
没有实际的理由,因为它只是一个简单的函数,执行的操作与(min_rank(x) - 1)/(length(x) - 1)
相同。与尝试采用percent_rank
的方式相比,编写rank(value)/length(value)
更容易。 - David Arenburg