规范化/缩放数据集

时间:2015-09-15 15:39:08

标签: r excel statistics excel-formula

我有以下数据集:

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

这些是学生获得的考试成绩,学生在此考试中最多可获得15分或最低0分(顺便说一句,没有人得到最大或最小分数),< strong>然而,在该测试中获得的最低分数是1,最高分数是14

现在,我想将此数据标准化/缩放到0到20的范围。 如何在excel中实现这一目标?还是在R? 我的最终目标是将该测试中的分数标准化为上述标度,并将它们与另一组数据进行比较,其中max和min分别为5和0。 如何正确地比较这两个不同的缩放数据集?

我尝试了什么: 我在互联网上浏览了很多东西,然后想出了这个:

enter image description here

我是从wikipedia.得到的 这种方法可靠吗?

5 个答案:

答案 0 :(得分:2)

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

由于您的边缘确实为0和15而不是2和14,因此您的min(x)=0max(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

结果直观,功能可靠。例如,得分14/15的人应该获得最高分(并且非常接近20分),这就是这里的情况(在转换之后他们得分为18.6666)。

答案 1 :(得分:1)

您可以使用R:

中的此命令在0到20之间进行缩放
newvalue <- 20/(max(score)-min(score))*(score-min(score))

答案 2 :(得分:1)

如果所有音阶的最低音为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))这实际上是您从维基百科发布的公式。 ;)

希望这有帮助!

答案 3 :(得分:1)

在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

并复制下来:

enter image description here

当然,如果您希望缩放与原始最大值或最小值无关,则可以在 C1 0 中使用 15 C2

答案 4 :(得分:1)

这很简单。由于这两个等级都是线性的,因此简单的多重比率将完成工作。或者换句话说,你集合中的每个等级都需要为* 20/15。 enter image description here