如何循环遍历列名称的向量,使用赋值回到列和函数引用循环索引来改变每一列

时间:2018-03-30 21:03:09

标签: r dplyr

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

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)) 

1 个答案:

答案 0 :(得分:2)

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

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

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

df_have %>% mutate_at(c("x","y"), funs(mean(.)+z))