Mutate_at ,通过指定列名添加列

DD *_*hen 2 r dplyr

我有iris数据框。我想添加列“log_Sepal.Length”和“log_Sepal.Width”,它们是将日志应用到“Sepal.Length”和“Sepal.Width”的结果。我试过:

iris %>% 
  mutate_at(.vars = vars(names(.)[str_detect(names(.), "Sepal")] ), .funs = c("identity", "log"))
Run Code Online (Sandbox Code Playgroud)

但我想要的数据框是:

iris$log_Sepal.Length <- log(iris$Sepal.Length) 
iris$log_Sepal.Width <- log(iris$Sepal.Width)  
iris 
Run Code Online (Sandbox Code Playgroud)

这可能吗mutate_at

Ron*_*hah 5

您可以使用 :

library(dplyr)
iris %>% mutate_at(vars(contains('Sepal')), list(log = ~log(.)))
Run Code Online (Sandbox Code Playgroud)

但是,mutate_at已弃用,acrossdplyr1.0.0开始使用

iris %>% mutate(across(contains('Sepal'), log, .names = 'log_{col}'))

#  Sepal.Length Sepal.Width Petal.Length Petal.Width Species log_Sepal.Length log_Sepal.Width
#1          5.1         3.5          1.4         0.2  setosa         1.629241        1.252763
#2          4.9         3.0          1.4         0.2  setosa         1.589235        1.098612
#3          4.7         3.2          1.3         0.2  setosa         1.547563        1.163151
#4          4.6         3.1          1.5         0.2  setosa         1.526056        1.131402
#5          5.0         3.6          1.4         0.2  setosa         1.609438        1.280934
#6          5.4         3.9          1.7         0.4  setosa         1.686399        1.360977
#...
#...
Run Code Online (Sandbox Code Playgroud)