代码之家  ›  专栏  ›  技术社区  ›  Eric Green

如何循环遍历列名向量,使用赋值将每个列变回列和引用循环索引的函数

  •  1
  • Eric Green  · 技术社区  · 8 年前

    如果您能原谅我对循环的兴趣,我想知道如何循环变量名向量(在我的用例中必须是字符串)并改变原始列。在这个玩具示例中,我想计算列的平均值 i 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)) 
    
    1 回复  |  直到 8 年前
        1
  •  4
  •   MrFlick    8 年前

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

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