查找新数据点的分位数或查找范围

时间:2016-04-14 15:58:57

标签: r dataframe dplyr

我正在寻找一种更有效的方法来实现这一点,而不使用嵌套的ifelse()语句,我知道这会大大降低R值。我不能分享我的实际数据(使用twentiles,而不是pentile),但希望我能说明下面的问题。

假设我有以下数据框的pentile和最大值。

pentiles <- data.frame(pentile = c(1:5), max_value = c(seq(10,50,10)))

对于新的数据帧,我希望能够查找给定值所在的pentile,然后返回该pentile。例如:

values <- data.frame(score = c(3, 15, 49, 34, 21))

应以某种格式提供(1, 2, 5, 4, 3)的解决方案(values数据框中的独立向量或列。

我对dplyr非常熟悉并且无法想到任何事情,但我感谢可能有data.table解决方案,我不知道。提前谢谢。

2 个答案:

答案 0 :(得分:1)

假设pentiles数据框已排序,您可以执行

tmp <- cbind(pentiles$max_value)[, rep(1, length(values$score))]
pentiles$pentile[apply(sweep(tmp, 2, values$score) >= 0, 2, which.max)]

它执行不必要的操作,但可能仍然比for循环更快。

答案 1 :(得分:1)

假设存在最小值(例如0):

as.numeric(cut(values[,1], c(0, pentiles$max_value)))