考虑到简单的代码,
df <- data.frame(x = 1:2,
y = 3:4,
z = 5:6)
如何使用colnames()
重命名包含一行的列x
和z
?
我知道colnames(df)[1:2] <- c("p", "q")
会修改前两个标题,但如何重命名Not-Together列?
我知道不同的命令可以完成这项工作,只是想知道是否有colnames()
的解决方案.
考虑到简单的代码,
df <- data.frame(x = 1:2,
y = 3:4,
z = 5:6)
如何使用colnames()
重命名包含一行的列x
和z
?
我知道colnames(df)[1:2] <- c("p", "q")
会修改前两个标题,但如何重命名Not-Together列?
我知道不同的命令可以完成这项工作,只是想知道是否有colnames()
的解决方案.
您可以使用c(1,3)
来代替 Select 第一列和第二列的1:2
,也可以使用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
或使用transform
.
names(df) <- transform(as.list(setNames(names(df), names(df))), x="p", z="q")
还可以看看Rename multiple columns by names和Canonical tidyverse method to update some values of a vector from a look-up table.
注:在colnames<-
的源代码中,您可以找到以下几行:
if (is.data.frame(x)) {
names(x) <- value
}
所以当我有data.frame
分的时候,我更喜欢用names
而不是colnames
.