我有一个data.frame df
,其中包含列A
和B
:
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
。
干杯!
答案 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