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

R 查找新数据点的分位数或查找范围,r,dataframe,dplyr,R,Dataframe,Dplyr,我正在寻找一种更有效的方法来实现这一点,而不必使用嵌套的ifelse()语句,我知道这会大大降低R的速度。我不能分享我的实际数据(使用的是二十,而不是奔腾),但希望我能说明下面的问题 假设我有以下pentiles数据帧和最大值 pentiles <- data.frame(pentile = c(1:5), max_value = c(seq(10,50,10))) pentiles假设对pentiles数据帧进行了排序,您可以 tmp <- cbind(pentiles$max_

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

假设我有以下pentiles数据帧和最大值

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

pentiles假设对
pentiles
数据帧进行了排序,您可以

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

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

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


您是否尝试过dplyr中的
?ntile
?我相信这将基于
值中的数据创建新的分位数。我试图跟踪人口随时间的变化,因此新值需要按旧/现有边界分组。谢谢。这确实有效,但另一个答案是更整洁,跑得更快。我感谢你的努力。
tmp <- cbind(pentiles$max_value)[, rep(1, length(values$score))]
pentiles$pentile[apply(sweep(tmp, 2, values$score) >= 0, 2, which.max)]
as.numeric(cut(values[,1], c(0, pentiles$max_value)))