【发布时间】:2014-12-31 00:54:40
【问题描述】:
我在 R 中的数据框中有一列 data$height。值的范围是 0-400。我想对列中的值进行规范化,使结果值介于 0-1 之间并且是分位数,即数据集中的中值应该反映 0.5 作为较新的值。
关于如何做到这一点的任何猜测。
【问题讨论】:
标签: r normalization
我在 R 中的数据框中有一列 data$height。值的范围是 0-400。我想对列中的值进行规范化,使结果值介于 0-1 之间并且是分位数,即数据集中的中值应该反映 0.5 作为较新的值。
关于如何做到这一点的任何猜测。
【问题讨论】:
标签: r normalization
你想要某种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
【讨论】:
R 函数ppoints 是将值映射到百分位等级的常用方法。
查看它的 a 参数 -
设置a=1取最小值为0,最大值为1
设置a=0取最小值为1/(n+1),最大值为n/(n+1)
默认情况下它有 a=3/8(如果 n 小于或等于 10)或 a=1/2(当 n 大于 10)
此函数被 R 中的其他函数使用。例如,它被 qqnorm 调用以进行正常的分位数-分位数图。
【讨论】: