我希望这不是一个重复的问题,因为我找不到我有兴趣使用的答案。我有 70 列,我想重命名它们。我知道几种方法作为例子:
df1<-setmames (df1, c("BA1", "MA2", "NA3"...), c( "AB1","QB2","Q3"...))
Run Code Online (Sandbox Code Playgroud)
但是这些方法没有帮助,因为我们有一个非常大的脚本。我想知道我们是否可以使用tidyverse?
举个例子,我可以显示三列,假设我有这个表:
AB1 AB2 AB3
12 13 13
12 13 13
12 11 13
12 13 17
12 13 16Run Code Online (Sandbox Code Playgroud)
我想要这张桌子
MZ1 MZ2 MZ3
12 13 13
12 13 13
12 11 13
12 13 17
12 13 16Run Code Online (Sandbox Code Playgroud)
考虑到这只是一个例子,我有 70 列。
我们可以使用索引或列名
names(df1)[1:70] <- v1
Run Code Online (Sandbox Code Playgroud)
在哪里
v1<- c("AB1", "QB2", ...)
Run Code Online (Sandbox Code Playgroud)
有了dplyr,我们可以使用rename_at
library(dplyr)
library(stringr)
df1 <- df1 %>%
rename_at(1:70, ~ v1)
Run Code Online (Sandbox Code Playgroud)
如果我们重命名以“AB”开头的列
names(df1)
#[1] "x1" "x2" "AB1" "AB2"
df1 %>%
rename_at(vars(matches('^AB\\d+$')), ~ str_replace(., 'AB', 'MZ'))
# x1 x2 MZ1 MZ2
#1 1 6 -0.5458808 0.6048889
#2 2 7 0.5365853 0.3707349
#3 3 8 0.4196231 0.6716903
#4 4 9 -0.5836272 0.6729823
#5 5 10 0.8474600 0.3204306
Run Code Online (Sandbox Code Playgroud)
或者在 base R
i1 <- grep("^AB\\d+$", names(df1))
names(df1)[i1] <- sub("AB", "MZ", names(df1)[i1])
Run Code Online (Sandbox Code Playgroud)
df2 <- df2 %>%
rename_at(vars(matches("^AB\\d+$")), ~ str_replace(., "AB", "MZ"))
df2
# MZ1 MZ2 MZ3
#1 12 13 13
#2 12 13 13
#3 12 11 13
#4 12 13 17
#5 12 13 16
Run Code Online (Sandbox Code Playgroud)
set.seed(24)
df1 <- data.frame(x1 = 1:5, x2 = 6:10, AB1 = rnorm(5), AB2 = runif(5))
Run Code Online (Sandbox Code Playgroud)
原始数据值
df1
# x1 x2 AB1 AB2
#1 1 6 -0.5458808 0.6048889
#2 2 7 0.5365853 0.3707349
#3 3 8 0.4196231 0.6716903
#4 4 9 -0.5836272 0.6729823
#5 5 10 0.8474600 0.3204306
Run Code Online (Sandbox Code Playgroud)
df2 <- structure(list(AB1 = c(12L, 12L, 12L, 12L, 12L), AB2 = c(13L,
13L, 11L, 13L, 13L), AB3 = c(13L, 13L, 13L, 17L, 16L)),
class = "data.frame", row.names = c(NA, -5L))
Run Code Online (Sandbox Code Playgroud)