масштабировать конкретную переменную в zscores возвращает матрицу - PullRequest
0 голосов
/ 03 августа 2020
mtcars %>% mutate(mpg_scaled = scale(mpg)) %>% glimpse
Rows: 32
Columns: 12
$ mpg        <dbl> 21.0, 21.0, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, 22.8, 19.2, 17.8, 16.4, 17.3, 15.2, 10.4, 10.4, 14.7, 32.4, 30.4, 33.9, 21.5, 15.5…
$ cyl        <dbl> 6, 6, 4, 6, 8, 6, 8, 4, 4, 6, 6, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 8, 8, 8, 8, 4, 4, 4, 8, 6, 8, 4
$ disp       <dbl> 160.0, 160.0, 108.0, 258.0, 360.0, 225.0, 360.0, 146.7, 140.8, 167.6, 167.6, 275.8, 275.8, 275.8, 472.0, 460.0, 440.0, 78.7, 75.7,…
$ hp         <dbl> 110, 110, 93, 110, 175, 105, 245, 62, 95, 123, 123, 180, 180, 180, 205, 215, 230, 66, 52, 65, 97, 150, 150, 245, 175, 66, 91, 113,…
$ drat       <dbl> 3.90, 3.90, 3.85, 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3.92, 3.92, 3.07, 3.07, 3.07, 2.93, 3.00, 3.23, 4.08, 4.93, 4.22, 3.70, 2.76…
$ wt         <dbl> 2.620, 2.875, 2.320, 3.215, 3.440, 3.460, 3.570, 3.190, 3.150, 3.440, 3.440, 4.070, 3.730, 3.780, 5.250, 5.424, 5.345, 2.200, 1.61…
$ qsec       <dbl> 16.46, 17.02, 18.61, 19.44, 17.02, 20.22, 15.84, 20.00, 22.90, 18.30, 18.90, 17.40, 17.60, 18.00, 17.98, 17.82, 17.42, 19.47, 18.5…
$ vs         <dbl> 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1
$ am         <dbl> 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1
$ gear       <dbl> 4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 3, 4, 5, 5, 5, 5, 5, 4
$ carb       <dbl> 4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, 2, 2, 4, 2, 1, 2, 2, 4, 6, 8, 2
$ mpg_scaled <dbl[,1]> <matrix[32 x 1]>

Ожидалось, что новое поле 'mpg_scaled' будет обычным dbl, как и остальные, но почему он говорит, что это матрица ?

Если я смотрю на голову, она выглядит как обычное числовое c поле:

mtcars %>% mutate(mpg_scaled = scale(mpg)) %>% head
   mpg cyl disp  hp drat    wt  qsec vs am gear carb mpg_scaled
1 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4  0.1508848
2 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4  0.1508848
3 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1  0.4495434
4 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1  0.2172534
5 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2 -0.2307345
6 18.1   6  225 105 2.76 3.460 20.22  1  0    3    1 -0.3302874

Что здесь происходит? Что такое mpg_scaled? Как я могу сделать это поле таким же «обычным», как остальные?

Ответы [ 2 ]

2 голосов
/ 03 августа 2020

Мы также можем удалить атрибуты dim, приведя к vector с помощью as.vector на matrix

library(dplyr)
mtcars %>% 
     mutate(mpg_scaled = as.vector(scale(mpg)))
1 голос
/ 03 августа 2020

Вы можете просто проиндексировать полученную матрицу, чтобы вернуть вектор. В документации base::scale сказано, что его входные данные x - это «числовая c матрица (как объект)», а его выходное значение - «центрированная, масштабированная матрица». Таким образом, функция создана для работы с матричными столбцами, но принимает векторный ввод и интерпретирует его как матрицу с одним столбцом.

library(tidyverse)
mtcars %>% mutate(mpg_scaled = scale(mpg)[,1]) %>% glimpse
#> Rows: 32
#> Columns: 12
#> $ mpg        <dbl> 21.0, 21.0, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, 22.8, 19.2…
#> $ cyl        <dbl> 6, 6, 4, 6, 8, 6, 8, 4, 4, 6, 6, 8, 8, 8, 8, 8, 8, 4, 4, 4…
#> $ disp       <dbl> 160.0, 160.0, 108.0, 258.0, 360.0, 225.0, 360.0, 146.7, 14…
#> $ hp         <dbl> 110, 110, 93, 110, 175, 105, 245, 62, 95, 123, 123, 180, 1…
#> $ drat       <dbl> 3.90, 3.90, 3.85, 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3.92…
#> $ wt         <dbl> 2.620, 2.875, 2.320, 3.215, 3.440, 3.460, 3.570, 3.190, 3.…
#> $ qsec       <dbl> 16.46, 17.02, 18.61, 19.44, 17.02, 20.22, 15.84, 20.00, 22…
#> $ vs         <dbl> 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1…
#> $ am         <dbl> 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1…
#> $ gear       <dbl> 4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 4…
#> $ carb       <dbl> 4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1…
#> $ mpg_scaled <dbl> 0.1508848, 0.1508848, 0.4495434, 0.2172534, -0.2307345, -0…

Создано 2020-08-03 пакет (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...