- Пожалуйста, попробуйте опубликовать действительное представление в следующий раз. Это избавит других от необходимости вручную воспроизводить ваши входные данные. Кроме того, не сразу понятно, как ваш первый фрагмент кода, ссылающийся на df со столбцами
v1
- v5
, относится к последующему фрагменту кода, ссылающемуся на df$mother.iq
. - В файле справки для
psych::rescale()
конкретно указано, что вход x
должен представлять собой матрицу или фрейм данных . Я подозреваю, что именно поэтому вы получаете не то, что ожидали. - Хотя вы можете использовать
psych::rescale()
, лучшая альтернатива, обеспечивающая большую гибкость, может заключаться в том, чтобы предвосхитить go дополнительную зависимость от пакета {psych}
в целом и вместо этого просто вручную изменить масштаб столбцов по мере необходимости. Два подхода проиллюстрированы на следующем рисунке:
# load libraries
library(tidyverse)
# define data as per OP
df <- data.frame(
v1 = c(65L, 98L, 85L, 83L, 115L, 98L),
v2 = c(1L, 1L, 1L, 1L, 1L, 0L),
v3 = c(121.12, 89.36, 115.44, 99.45, 92.75, 107.9),
v4 = c(4L, 4L, 4L, 3L, 4L, 1L),
v5 = c(27L, 25L, 27L, 25L, 27L, 18L)
)
# rescale via psych::rescale using entire data frame
df %>% psych::rescale(mean = 100, sd = 15)
#> v1 v2 v3 v4 v5
#> 1 77.38682 106.12372 119.90143 108.25723 109.31746
#> 2 106.46091 106.12372 82.24089 108.25723 100.71673
#> 3 95.00748 106.12372 113.16617 108.25723 109.31746
#> 4 93.24541 106.12372 94.20546 95.87139 100.71673
#> 5 121.43847 106.12372 86.26070 108.25723 109.31746
#> 6 106.46091 69.38138 104.22535 71.09970 70.61416
# if you only want to do this for specific columns, do it manually by targeting
# columns using dplyr::mutate_at(), an anonymous function, and scale (from base
# R):
df %>%
mutate_at(vars(v4, v5), function(x) scale(x)*15 + 100)
#> v1 v2 v3 v4 v5
#> 1 65 1 121.12 108.25723 109.31746
#> 2 98 1 89.36 108.25723 100.71673
#> 3 85 1 115.44 108.25723 109.31746
#> 4 83 1 99.45 95.87139 100.71673
#> 5 115 1 92.75 108.25723 109.31746
#> 6 98 0 107.90 71.09970 70.61416