使用scale()函数以标准偏差而不居中

时间:2018-06-26 16:14:00

标签: r

在我正在分析的数据集中,我选择了一些变量,这些变量要缩放到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 :(得分:1)

map遍历每列。 scale函数中的scale自变量采用该特定列的sd。基于apply的方法是当我们有多个列时。

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

-检查OP基本R代码生成的输出

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