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

时间:2018-11-18 06:42:03

标签: r pipe

我有一个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

干杯!

2 个答案:

答案 0 :(得分:2)

您可以使用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))

答案 1 :(得分:1)

我们可以使用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