Используйте функцию scale () для стандартного отклонения без центрирования - PullRequest
0 голосов
/ 26 июня 2018

В наборе данных, который я анализирую, у меня есть выбор переменных, которые я хотел бы масштабировать до 1 стандартного отклонения, но не по центру. Я попробовал это, используя функцию scale() в примере ниже.

require(tidyverse)

set.seed(1)
df <- data.frame(replicate(10, sample(0:1000, 1000, rep = TRUE)))
scaled_vars <- df %>%
    select(X1 : X6) %>%
    map(~scale(., center = F)

Однако из чтения документации scale(), если center = F, тогда выполняется масштабирование до среднего квадрата, а не стандартного отклонения. В документации говорится, что для масштабирования до стандартного отклонения без центрирования следует использовать код:

scale(x, center = FALSE, scale = apply(x, 2, sd, na.rm = T))

Однако я не могу заставить этот код работать в моей функции map.

map(~scale(., center = F, scale = apply(., 2, sd, na.rm = T)

В сообщении об ошибке указывается, что объект 'x' не найден. Как я могу настроить свой код для достижения моей цели? Спасибо.

1 Ответ

0 голосов
/ 26 июня 2018

map проходит через каждый столбец. Аргумент scale в функции scale принимает sd для этого конкретного столбца. Подход apply основан на том, что у нас есть несколько столбцов.

out <- df %>% 
         select(X1:X6) %>% 
         map_df(~ scale(.x, center = FALSE, scale = sd(.x, na.rm = TRUE)))

-проверка с выходом, сгенерированным из базового кода R OP

out1 <- scale(df[1:6], center = FALSE, 
         scale = apply(df[1:6], 2, sd, na.rm = TRUE))

all.equal(as.matrix(out), out1, check.attributes = FALSE)
#[1] TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...