我有以下数据集:
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。 如何正确地比较这两个不同的缩放数据集?
我尝试了什么: 我在互联网上浏览了很多东西,然后想出了这个:
我是从wikipedia.得到的 这种方法可靠吗?
答案 0 :(得分:2)
在您的情况下,我会使用您在问题上发布的功能比例公式。 (x - min(x)) / (max(x) - min(x))
实际上会将您的测试标记转换为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
结果直观,功能可靠。例如,得分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
并复制下来:
当然,如果您希望缩放与原始最大值或最小值无关,则可以在 C1 和 0 中使用 15 的 C2 强>
答案 4 :(得分:1)