在我正在分析的数据集中,我选择了一些变量,这些变量要缩放到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”。如何调整代码以实现目标?谢谢。
答案 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