r - 在 r 中处理 scale()-d 数据集
问题描述
提前为这个令人难以置信的愚蠢问题道歉,但是在缩放数据集之后,我对列和的行为方式有点困惑。有人可以快速回答我吗?
data("USArrests")
df <- USArrests
df <- scale(df)
sum(df[,1])
# -3.833739e-15
sum(df[1:50,1])
# -3.833739e-15
sum(df[1:49,1])
# 0.2268391
sum(df[50,1])
# -0.2268391
sum(df[2:50,1])
# -1.242564
sum(df[1,1])
# 1.242564
类似的情况发生在 mean() 中,对整列进行平均会给我一个疯狂的值,但删除一行不会。今天早上我感觉非常愚蠢,需要一只手来克服这个问题。
解决方案
了解scale()
对您的数据做了什么很重要。我从https://stackoverflow.com/a/20256272/11167644中提取了一个示例来解释:
set.seed(1)
x <- runif(6)
x
#> [1] 0.2655087 0.3721239 0.5728534 0.9082078 0.2016819 0.8983897
(x - mean(x)) / sd(x)
#> [1] -0.8717643 -0.5287394 0.1170895 1.1960620 -1.0771210 1.1644732
scale(x)[1:6]
#> [1] -0.8717643 -0.5287394 0.1170895 1.1960620 -1.0771210 1.1644732
您的数据正在缩放并以零为中心 - 我们可以通过查看summary()
未缩放和缩放数据集的 来进一步验证这一点:
data("USArrests")
df <- USArrests
summary(df)
#> Murder Assault UrbanPop Rape
#> Min. : 0.800 Min. : 45.0 Min. :32.00 Min. : 7.30
#> 1st Qu.: 4.075 1st Qu.:109.0 1st Qu.:54.50 1st Qu.:15.07
#> Median : 7.250 Median :159.0 Median :66.00 Median :20.10
#> Mean : 7.788 Mean :170.8 Mean :65.54 Mean :21.23
#> 3rd Qu.:11.250 3rd Qu.:249.0 3rd Qu.:77.75 3rd Qu.:26.18
#> Max. :17.400 Max. :337.0 Max. :91.00 Max. :46.00
summary(scale(df))
#> Murder Assault UrbanPop Rape
#> Min. :-1.6044 Min. :-1.5090 Min. :-2.31714 Min. :-1.4874
#> 1st Qu.:-0.8525 1st Qu.:-0.7411 1st Qu.:-0.76271 1st Qu.:-0.6574
#> Median :-0.1235 Median :-0.1411 Median : 0.03178 Median :-0.1209
#> Mean : 0.0000 Mean : 0.0000 Mean : 0.00000 Mean : 0.0000
#> 3rd Qu.: 0.7949 3rd Qu.: 0.9388 3rd Qu.: 0.84354 3rd Qu.: 0.5277
#> Max. : 2.2069 Max. : 1.9948 Max. : 1.75892 Max. : 2.6444
再次注意零的平均值 - 这解释了为什么数据总和为零。
最后,我们可以通过一些直方图直观地查看缩放数据与未缩放数据的样子:
library(tidyverse)
df %>%
select(Murder) %>%
mutate(Scaled_Murder = scale(Murder)) %>%
pivot_longer(everything()) %>%
ggplot(aes(value, fill = name)) +
geom_histogram(alpha = 0.75, position = "identity", bins = 20)
由reprex 包(v0.3.0)于 2021-03-02 创建
推荐阅读
- c# - 将 c++ 非托管代码编组为 c# 托管代码的替代方法
- r - R将函数向量应用于数据框
- c# - 在指向另一个页面的表单上创建自定义动态链接
- django - 服务器是否在主机“localhost”上运行 Django 和 PostgreSQL 连接?
- reactjs - 我应该在反应选择器中检查数组是否为空
- docker - 循环与 Falco 崩溃
- java - 如何使用 selenium-java 点击 href 链接
- java - 我无法在 json 中获取对象的数据
- c# - 在不打开新窗口的情况下导航到另一个 wpf
- css - Angular:如何在 ng-template 中显示模态对话框(图表)