使用 tidyverse 和 mutate_all 对每一列应用相同的函数

Leo*_*ass 2 r dplyr

我有以下数据框

df <- data.frame(total=100,a=5,b=5)
Run Code Online (Sandbox Code Playgroud)

我想对每一列应用相同的功能。例如,通过划分第一列来划分所有列

df <- df/df$total
Run Code Online (Sandbox Code Playgroud)

但是,我想用 mutate_all 来做

我的代码是这样的

df <- data.frame(total=100,a=5,b=5) %>% mutate_all(list(~./total))
Run Code Online (Sandbox Code Playgroud)

这没有给我想要的输出。我究竟做错了什么?

Mar*_*ius 5

total是你的数据框中的第一列,mutate_alltotal首先被除以,变成 1。然后其他列被除以 1。如果total是最后一列,我认为你的语法会起作用,但依赖它可能不安全在那。最好使用mutate_at和排除total来避免这种情况:

data.frame(a=5,b=5,total=100) %>% 
    mutate_at(vars(-total), list(~./total))
Run Code Online (Sandbox Code Playgroud)