代码之家  ›  专栏  ›  技术社区  ›  ip2018

Dplyr在指定位置改变新列

  •  1
  • ip2018  · 技术社区  · 8 年前

    a = c(10,20,30)
    b = c(1,2,3)
    c = c(4,5,6)
    d = c(7,8,9)
    df=data.frame(a,b,c,d)
    
    library(dplyr)
    
    df_1 = df %>% mutate(a1=sum(a+1))
    

    如何在“a”(或任何其他已定义的位置)后添加“a1”,而不是在末尾?

    非常感谢。

    2 回复  |  直到 8 年前
        1
  •  10
  •   akrun    8 年前

    另一个选择是 add_column tibble

    library(tibble)    
    add_column(df, a1 = sum(a + 1), .after = "a")
    #   a a1 b c d
    #1 10 63 1 4 7
    #2 20 63 2 5 8
    #3 30 63 3 6 9
    
        2
  •  3
  •   Joris C.    7 年前

    select_helper 函数可根据需要重新排列新创建的列:

    library(dplyr)
    
    ## add a1 after a
    df %>% 
        mutate(a1 = sum(a + 1)) %>%
        select(a, a1, everything())
    #>    a a1 b c d
    #> 1 10 63 1 4 7
    #> 2 20 63 2 5 8
    #> 3 30 63 3 6 9
    
    ## add a1 after c
    df %>% 
        mutate(a1 = sum(a + 1)) %>%
        select(1:c, a1, everything())
    #>    a b c a1 d
    #> 1 10 1 4 63 7
    #> 2 20 2 5 63 8
    #> 3 30 3 6 63 9
    
        3
  •  1
  •   www    8 年前

    这个 mutate 函数将始终在末尾添加新创建的列。但是,我们可以在 函数使用 select

    library(dplyr)
    
    df_1 <- df %>% 
      mutate(a1 = sum(a + 1)) %>%
      select(sort(names(.)))
    df_1
    #    a a1 b c d
    # 1 10 63 1 4 7
    # 2 20 63 2 5 8
    # 3 30 63 3 6 9