标准化/缩放数据集

我有以下数据集:

dat<-as.data.frame(rbind(10,8,2,7,10,10,1,10,14,9,2,6,10,8,10,8,10,10,7,11,10)) colnames(dat)<-"Score" print(dat) Score 10 8 2 7 10 10 1 10 14 9 2 6 10 8 10 8 10 10 7 11 10 

这些是学生获得的考试成绩, 在这个testing中学生可以得到最多15或最小0 (顺便说一下,没有人得到最大或最小), 但是在这个testing中得到的最低分数是1和最高的是14

现在,我想规范化/规模这个数据的规模0至20.如何在Excel中实现这一点? 或在R? 我的最终目标是把这个testing中的分数归一化到上面的规模,并将它们与另一组数据分别进行比较,最大值和最小值分别是5和0。 如何正确比较这两个不同的缩放数据集?

我试过的东西:我在互联网上经历了很多东西,然后想出了这个:

在这里输入图像说明

我从维基百科获得它。 这个方法可靠吗?

在Excel中,如果您希望归一化数据的最小值为0 ,最大值为20 ,那么我们需要解决:

 y = A * x + b 

两点。

将原始数据的最大值放在C1中

 =MAX(A:A) 

把原始数据的最小值放在C2中

 =MIN(A:A) 

将所需的最大值放在D1中 ,将所需的最小值放入D2中 。 把A系数的公式写成C3

 =($D$1-$D$2)/($C$1-$C$2) 

C4中B系数公式:

 =$D$1-$C$3*$C$1 

最后把缩放公式放在B1

 =A1*$C$3+$C$4 

并抄下来:

在这里输入图像说明

当然,如果你想缩放独立于原始的最大值或最小值,你可以在C1中使用15 ,在C2中使用0

在你的情况下,我会使用你发布在你的问题上的function比例公式。 (x - min(x)) / (max(x) - min(x))将把您的testing标记转换为0-1之间的范围。

由于你的边缘确实是0和15而不是2和14,所以你的min(x)=0 ,你的max(x)=15 。 一旦你有0-1之间的分数使用上述,你只需乘以20。

 tests <- read.table(header=T, file='clipboard') tests2 <- (tests - 0) / (15 - 0) #or equally tests / 15 

乘以20得到0-20之间的分数:

 > tests2 * 20 Score 1 13.333333 2 10.666667 3 2.666667 4 9.333333 5 13.333333 6 13.333333 7 1.333333 8 13.333333 9 18.666667 10 12.000000 11 2.666667 12 8.000000 13 13.333333 14 10.666667 15 13.333333 16 10.666667 17 13.333333 18 13.333333 19 9.333333 20 14.666667 21 13.333333 

结果直观,function可靠。 例如,得分14/15的人应该得到最高的分数(非常接近20),在这里就是这种情况(他们得分18.6666)。

您可以使用R中的此命令在0到20之间进行缩放:

 newvalue <- 20/(max(score)-min(score))*(score-min(score)) 

math方法是相当简单的,如果所有的尺度的楼层是0。

new_value = new_ceiling * old_value / old_ceiling

下一个公式将在每个尺度上考虑不同的楼层:

new_value = new_floor + (new_ceiling - old_ceiling) * ((old_value-old_floor)/(old_ceiling-old_floor))这实际上是从维基百科发布的公式。 ;)

希望这可以帮助!

这很简单。 由于这两个等级都是线性的,所以一个简单的倍数就可以完成这个工作。 或者换句话说,你们组中的每个年级都需要* 20/15。 在这里输入图像说明