Rua*_*tel 6 r scale dplyr across
请参阅下面的代码。
\nmutate(across(everything(), scale, .names = "{.col}_z"))语法的一部分是生成末尾[,1]附加的列。
两个问题:
\nlibrary(dplyr)\n\n# Input\ndf_test <- tibble(x = c(1, 2, 3, 4), y = c(5, 6, 7, 8))\n\n# My code generating x_z and y_z\ndf_scaled <- df_test %>% \n mutate(across(everything(), scale, .names = "{.col}_z"))\n\n# Output\ndf_scaled\n#> # A tibble: 4 \xc3\x97 4\n#> x y x_z[,1] y_z[,1]\n#> <dbl> <dbl> <dbl> <dbl>\n#> 1 1 5 -1.16 -1.16 \n#> 2 2 6 -0.387 -0.387\n#> 3 3 7 0.387 0.387\n#> 4 4 8 1.16 1.16\nRun Code Online (Sandbox Code Playgroud)\n#> # A tibble: 4 \xc3\x97 4\n#> x y x_z y_z\n#> <dbl> <dbl> <dbl> <dbl>\n#> 1 1 5 -1.16 -1.16 \n#> 2 2 6 -0.387 -0.387\n#> 3 3 7 0.387 0.387\n#> 4 4 8 1.16 1.16\nRun Code Online (Sandbox Code Playgroud)\n创建于 2022 年 12 月 30 日,使用reprex v2.0.2
\nscale返回一个matrix. 我们可以使用c或提取列[或使用as.numeric删除dim属性
library(dplyr)\ndf_test %>% \n mutate(across(everything(),\n ~ as.numeric(scale(.x)), .names = "{.col}_z"))\nRun Code Online (Sandbox Code Playgroud)\n-输出
\n# A tibble: 4 \xc3\x97 4\n x y x_z y_z\n <dbl> <dbl> <dbl> <dbl>\n1 1 5 -1.16 -1.16 \n2 2 6 -0.387 -0.387\n3 3 7 0.387 0.387\n4 4 8 1.16 1.16 \nRun Code Online (Sandbox Code Playgroud)\n即检查单列上的输出
\n> scale(df_test[[1]])\n [,1]\n[1,] -1.1618950\n[2,] -0.3872983\n[3,] 0.3872983\n[4,] 1.1618950\nattr(,"scaled:center")\n[1] 2.5\nattr(,"scaled:scale")\n[1] 1.290994\nRun Code Online (Sandbox Code Playgroud)\n如果我们检查源代码
\n> scale.default\nfunction (x, center = TRUE, scale = TRUE) \n{\n x <- as.matrix(x) # it is converting to matrix\n...\nRun Code Online (Sandbox Code Playgroud)\n并且在应用中是必需的apply/colMeans/sweep,因此当我们将向量传递给 时scale,它确实将其转换为单列矩阵
> as.matrix(df_test$x)\n [,1]\n[1,] 1\n[2,] 2\n[3,] 3\n[4,] 4\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
497 次 |
| 最近记录: |