我有一个df包含列A和的 data.frame B:
df <- data.frame(A = 1:5, B = 11:15)
Run Code Online (Sandbox Code Playgroud)
还有另一个 data.frame ,df2我通过各种计算构建它,最终具有通用列名称 X1 和 X2,我无法直接控制它们(因为它在某一点作为矩阵传递)。所以它最终会变成这样:
mtrx <- matrix(1:10, ncol = 2)
mtrx %>% data.frame()
Run Code Online (Sandbox Code Playgroud)
我想将 df2 中的列重命名为与 df 相同。当然,我可以在通过简单的分配完成构建 df2 后执行此操作:
names(df2)<-names(df)
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 有没有办法直接在管道内执行此操作?我似乎无法使用 dplyr::rename,因为它们必须采用 newname=oldname 的形式,而且我似乎无法对其进行矢量化。调用data.frame本身也是如此 - 据我所知,我不能只给它一个列名向量。我还缺少另一个选择吗?我希望是这样的
mtrx %>% data.frame() %>% rename(names(df))
Run Code Online (Sandbox Code Playgroud)
但这不起作用 - 给出错误Error: All arguments must be named。
干杯!
您可以使用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
Run Code Online (Sandbox Code Playgroud)
或者使用 的purrr等效项set_names
mtrx %>%
data.frame() %>%
purrr::set_names(., nm = names(df))
Run Code Online (Sandbox Code Playgroud)
第三个选项是"names<-"
mtrx %>%
data.frame() %>%
"names<-"(names(df))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1464 次 |
| 最近记录: |