如何循环遍历列名向量,通过赋值将每列变异回列和函数引用循环索引

Eri*_*een 3 r dplyr

如果您可以原谅我对循环的兴趣,我想知道如何循环遍历变量名向量(在我的用例中必须是字符串)并改变原始列。i在这个玩具示例中,我想计算plus列的平均值z

df_have <- data.frame(x=c(1, 1, 2, 3, 3),
                      y=c(2, 2, 3, 4, 4),
                      z=c(0, 1, 2, 3, 4))

for (i in c("x", "y")) {
  df_test <-
    df_have %>%
    mutate(!!i := mean(i)+z)
}

df_want <- data.frame(x=c(2, 3, 4, 5, 6), # mean 2 + z
                      y=c(3, 4, 5, 6, 7), # mean 3 + z
                      z=c(0, 1, 2, 3, 4)) 
Run Code Online (Sandbox Code Playgroud)

MrF*_*ick 5

好吧,如果你想做一个循环,那么

df_test <- df_have
for (i in c("x", "y")) {
  df_test <-
    df_test %>%
    mutate(!!i := mean((!!as.name(i)))+z)
}
Run Code Online (Sandbox Code Playgroud)

请注意,您需要将这些字符串转换为符号才能在 mutate 表达式中使用。在这种情况下,一个更简单的技巧是

df_have %>% mutate_at(c("x","y"), funs(mean(.)+z))
Run Code Online (Sandbox Code Playgroud)