使用 colnames() 重命名不在一起的列

问题描述 投票:0回答:1

考虑到简单的代码,

df <- data.frame(x = 1:2,
                 y = 3:4,
                 z = 5:6)

如何使用

x
重命名一行列
z
colnames()

我知道

colnames(df)[1:2] <- c("p", "q")
会修改前两个标题,但我如何重命名不在一起的列?

我知道可以完成这项工作的不同命令,只是想知道是否有

colnames()
解决方案。

r dataframe names
1个回答
3
投票

而不是选择第 1 列和第 2 列的

1:2
,您可以将
c(1,3)
用于第 1 列和第 3 列。此外,我会使用
names
代替
data.frame
而不是
colnames
colnames
会也工作。

names(df)[c(1,3)] <- c("p", "q")

如果位置未知,但名称未知,您可以使用

match
获取所需的列。

names(df)[match(c("x", "z"), names(df))] <- c("p", "q")

或者更强大的版本,以防找不到匹配项。

i <- c(x = "p", z = "q")[names(df)]
j <- !is.na(i)
names(df)[j] <- i[j]

或者不使用中间步骤的变体。

names(df) <- c(x = "p", z = "q", setNames(names(df), names(df)))[names(df)]

names(df) <- (\(.) c(x = "p", z = "q", setNames(., .))[.])(names(df)) #Variant

还看看按名称重命名多个列Canonical tidyverse method to update some values of a vector from a look-up table.


注意:在

colnames<-
的源代码中,您可以找到以下几行:

    if (is.data.frame(x)) {
        names(x) <- value
    }

所以当我有

names
时,我更喜欢使用
colnames
而不是
data.frame

© www.soinside.com 2019 - 2024. All rights reserved.