我的数据框中有一列R,数据$ height。值的范围为0-400。我想对列中的值进行标准化,使得结果值介于0-1和分位数之间,即数据集中的中值应该反映为0.5作为较新的值。
如何做到这一点的任何猜测。
答案 0 :(得分:3)
R函数ppoints
是将值映射到百分位数的常用方法。
请参阅其a
参数 -
设置a=1
将最小值设为0,将最大值设为1
设置a=0
将最小值设为1 /(n + 1),将最大值设为n /(n + 1)
默认情况下,它具有= 3/8(如果n为10或更小)或a = 1/2(当n大于10时)
此函数由R中的其他函数使用。例如,qqnorm
调用它来执行正常的分位数 - 分位数图。
答案 1 :(得分:2)
您需要某种rank
,例如
> set.seed(1)
> exdf <- data.frame(height = runif(5, min=0, max=400))
> exdf$r1 <- (rank(exdf$height) - 1) / (length(exdf$height)-1)
> exdf$r2 <- (rank(exdf$height)-1/2) / length(exdf$height)
> exdf
height r1 r2
1 106.20347 0.25 0.3
2 148.84956 0.50 0.5
3 229.14135 0.75 0.7
4 363.28312 1.00 0.9
5 80.67277 0.00 0.1