r - 在 R 中做一个等效于 Excel 的 =PERCENTRANK.EXC 函数?
问题描述
我想知道如何在 R 中转换 Excel 的百分位排他函数。我在这里找到了一种技术,如下所示:
true_df <- data.frame(some_column= c(24516,7174,13594,33838,40000))
percentilerank<-function(x){
rx<-rle(sort(x))
smaller<-cumsum(c(0, rx$lengths))[seq(length(rx$lengths))]
larger<-rev(cumsum(c(0, rev(rx$lengths))))[-1]
rxpr<-smaller/(smaller+larger)
rxpr[match(x, rx$values)]
}
dfr<-percentilerank(true_df$some_column)
#output which is similar to =PERCENTRANK.INC and NOT =PERCENTRANK.EXC
#[1] 0.50 0.00 0.25 0.75 1.00
但它=PERCENTRANK.INC
在 R 中是等效的。根据 Excel 中的信息弹出窗口,a=PERCENTRANK.INC
采用 (array, x-value of rank, [significance-optional]) 并返回包含第一个 (0%) 和最后一个 (100%) 的百分比排名数组中的值。
=PERCENTRANK.EXC
类似于它的对应物,但它返回的百分比排名不包括数组中的第一个和最后一个值。意思不是 0% 或 100%。
这是一个使用 Excel 显示差异的小示例:
当我应用上面的 R 函数时,它给了我类似于PERCENTRANK.INC($A$32:$A$36,A32)
列的输出。我怎样才能做到这一点?我是 R 的新手。
解决方案
我弄乱了代码并得到了这个:
true_df <- data.frame(some_column= c(24516,7174,13594,33838,40000))
percentilerank<-function(x){
rx<-rle(sort(x))
smaller<-cumsum(c(!0, rx$lengths))[seq(length(rx$lengths))]
larger<-rev(cumsum(c(0, rev(rx$lengths))))
rxpr<-smaller/(smaller+larger)
rxpr[match(x, rx$values)]
}
dfr<-percentilerank(true_df$some_column)
#output is now matches =PERCENTRANK.EXC
#[1] 0.5000000 0.1666667 0.3333333 0.6666667 0.8333333
由于 0 和 100% 不包括在百分位数中。我将线路更改smaller<-cumsum(c(0....
为smaller<-cumsum(c(!0....
和类似地摆脱了我从线路中取出 [-1] 的 100%larger<-...[-1]
推荐阅读
- java - 使用自定义登录时从 Firebase 中获取重复项
- python - 如何在不滞后程序的情况下监控新/删除的串行设备连接?
- python - 我怎样才能让我的功能不断要求用户输入,直到它是正确的?
- python - ModuleNotFoundError:使用从 tensorflow.contrib.seq2seq 导入帮助器时没有名为“tensorflow.contrib”的模块
- python - Python cx_Oracle XMLTYPE 数据检索错误 DPI-1040: LOB 已关闭
- directx-11 - 如何在 D3D11 中获取资源分配大小
- django - ec2上的Django celery worker错误尝试使用systemd启动守护进程
- vba - 将 PPTX 文件另存为 JPEG 时如何知道 JPEG 文件的名称?
- java - 以 10 为底的整数公式补码的证明在哪里?
- swift - 如何在 Swift 中将 RGB 十六进制值转换为 UIColor?