我正在寻找一种更有效的方法来实现这一点,而不使用嵌套的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
解决方案,我不知道。提前谢谢。
答案 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)))