【问题标题】:Renaming columns according to vector inside pipe根据管道内的向量重命名列
【发布时间】:2019-04-20 20:40:39
【问题描述】:

我有一个 data.frame df 与列 AB

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

还有另一个 data.frame,df2,我正在通过各种计算构建它,最终具有通用列名 X1 和 X2,我无法直接控制它们(因为它在某一点通过矩阵)。所以它最终是这样的:

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

我想将 df2 中的列重命名为与 df 相同。当然,我可以在通过简单的分配完成 df2 构建后执行此操作:

names(df2)<-names(df)

我的问题是 - 有没有办法直接在管道内执行此操作?我似乎无法使用 dplyr::rename,因为它们必须采用 newname=oldname 的形式,而且我似乎无法对其进行矢量化。 data.frame 调用本身也是如此——据我所知,我不能只给它一个列名向量。我还有另一个选择吗?我希望是这样的

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

但这不起作用 - 给出错误Error: All arguments must be named

干杯!

【问题讨论】:

    标签: r pipe


    【解决方案1】:

    您可以使用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&lt;-"

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

    【讨论】:

      【解决方案2】:

      我们可以从tidyverse使用rename_all

      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
      

      【讨论】:

        猜你喜欢
        • 2022-10-15
        • 2021-10-19
        • 2016-10-02
        • 1970-01-01
        • 2019-07-15
        • 1970-01-01
        • 1970-01-01
        • 2021-10-04
        • 2016-06-09
        相关资源
        最近更新 更多