首页 > 解决方案 > 使用 dplyr 中的一个 mutate_across 函数进行减法和除法

问题描述

我有一个看起来像 iris 数据集的数据集。

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

我想通过 Sepal.Length:Petal.Width 用数字2减去每个值,然后将结果除以4。如何在 dplyr 中使用 mutate_across 而不是两行来做到这一点?

iris %>% 
  mutate(across(c(Sepal.Length:Petal.Width), ~. -2 )) %>% 
  mutate(across(c(Sepal.Length:Petal.Width), ~. /4 )) 

标签: rdplyrtidyverseacross

解决方案


library(dplyr, warn.conflicts = F)
iris %>%
  mutate(across(1:4, ~  (. - 2)/4))
#>     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
#> 1          0.775       0.375       -0.150      -0.450     setosa
#> 2          0.725       0.250       -0.150      -0.450     setosa
#> 3          0.675       0.300       -0.175      -0.450     setosa
#> 4          0.650       0.275       -0.125      -0.450     setosa
#> 5          0.750       0.400       -0.150      -0.450     setosa
#> 6          0.850       0.475       -0.075      -0.400     setosa
#> 7          0.650       0.350       -0.150      -0.425     setosa
#> 8          0.750       0.350       -0.125      -0.450     setosa
#> 9          0.600       0.225       -0.150      -0.450     setosa
#> 10         0.725       0.275       -0.125      -0.475     setosa
.
.

reprex 包于 2021-07-06 创建 (v2.0.0 )


推荐阅读