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

根据管道内的向量重命名列

  •  1
  • iod  · 技术社区  · 7 年前

    df 带柱 A B

    df <- data.frame(A = 1:5, B = 11:15)
    

    还有另一个data.frame, df2

    mtrx <- matrix(1:10, ncol = 2)
    mtrx %>% data.frame()
    

    我想将df2中的列重命名为与df相同。当然,我可以在完成df2的构建后通过一个简单的赋值来完成:

    names(df2)<-names(df)
    

    data.frame 自我调用-据我所知,我不能只给它一个列名称向量。我还有别的选择吗?我所希望的是

    mtrx %>% data.frame() %>% rename(names(df))
    

    但这不起作用-会产生错误 Error: All arguments must be named .

    干杯

    2 回复  |  直到 7 年前
        1
  •  1
  •   akrun    7 年前

    我们可以使用 rename_all 从…起 tidyverse

    library(tidyverse)
    mtrx %>% 
        as.data.frame %>% 
        rename_all(~ names(df))
    #   A  B
    # 1 1  6
    # 2 2  7
    # 3 3  8
    # 4 4  9
    # 5 5 10
    
        2
  •  3
  •   markus    7 年前

    你可以用 setNames

    mtrx %>% 
      data.frame() %>% 
      setNames(., nm = names(df))
    #  A  B
    #1 1  6
    #2 2  7
    #3 3  8
    #4 4  9
    #5 5 10
    

    purrr 相当于 set_names

    mtrx %>% 
      data.frame() %>% 
      purrr::set_names(., nm = names(df))
    

    第三种选择是 "names<-"

    mtrx %>% 
      data.frame() %>% 
      "names<-"(names(df))