簡體   English   中英

在 R 中重命名多列

[英]Renaming multiple columns in R

我希望這不是一個重復的問題,因為我找不到我有興趣使用的答案。 我有 70 列,我想重命名它們。 我知道幾種方法作為例子:

df1<-setmames (df1, c("BA1", "MA2", "NA3"...), c( "AB1","QB2","Q3"...))

但是這些方法沒有幫助,因為我們有一個非常大的腳本。 我想知道我們是否可以使用tidyverse用一個tidyverse本來做到這tidyverse

舉個例子,我可以顯示三列,假設我有這個表:

 AB1 AB2 AB3 12 13 13 12 13 13 12 11 13 12 13 17 12 13 16

我想要這張桌子

 MZ1 MZ2 MZ3 12 13 13 12 13 13 12 11 13 12 13 17 12 13 16

考慮到這只是一個例子,我有 70 列。

我們可以使用索引或列名

names(df1)[1:70] <- v1

在哪里

 v1<- c("AB1", "QB2", ...)

使用dplyr ,我們可以使用rename_at

library(dplyr)
library(stringr)
df1 <- df1 %>%
          rename_at(1:70, ~ v1)

如果我們重命名以“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

或者在base R

i1 <- grep("^AB\\d+$", names(df1))
names(df1)[i1] <- sub("AB", "MZ", names(df1)[i1])

更新

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

數據

set.seed(24)
df1 <- data.frame(x1 = 1:5, x2 = 6:10, AB1 = rnorm(5), AB2 = runif(5))

原始數據值

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

來自 OP 帖子的更新數據

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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM