使用另一个数据框中的名称重命名列

Hel*_*ely 4 r

我正在学习 R 编程,因此遇到了一些问题 - 在您的帮助下已经能够解决这些问题。

但我现在需要重命名数据框的列。我有一个带有 2 列的翻译数据框,其中包含列名称和新列的名称。

这是我的代码:我的问题是如何从trans数据框中选择两列并将它们用作trans$oldtrans$new变量?

我有 7 列要重命名,因此翻译表可能会更长。

replace_header <- function()
{      
  names(industries)[names(industries)==trans$old] <- trans$new
  replaced <- industries
  return (replaced)
}  

replaced_industries <- replace_header()
Run Code Online (Sandbox Code Playgroud)

eip*_*i10 5

这是使用内置mtcars数据框的示例。我们将使用该match函数查找要替换的列名称的索引,然后将它们替换为新名称。

# Copy of built-in data frame
mt = mtcars

head(mt,3)
Run Code Online (Sandbox Code Playgroud)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Run Code Online (Sandbox Code Playgroud)
# Data frame with column name substitutions
dat = data.frame(old=c("mpg","am"), new=c("new.name1","new.name2"), stringsAsFactors=FALSE)

dat
Run Code Online (Sandbox Code Playgroud)
  old       new
1 mpg new.name1
2  am new.name2
Run Code Online (Sandbox Code Playgroud)

Use match to find the indices of the "old" names in the mt data frame:

match(dat[,"old"], names(mt))
Run Code Online (Sandbox Code Playgroud)
[1] 1 9
Run Code Online (Sandbox Code Playgroud)

Substitute "old" names with "new" names:

names(mt)[match(dat[,"old"], names(mt))] = dat[,"new"]

head(mt,3)
Run Code Online (Sandbox Code Playgroud)
                  new.name1 cyl disp  hp drat    wt  qsec vs new.name2 gear carb
Mazda RX4              21.0   6  160 110 3.90 2.620 16.46  0         1    4    4
Mazda RX4 Wag          21.0   6  160 110 3.90 2.875 17.02  0         1    4    4
Datsun 710             22.8   4  108  93 3.85 2.320 18.61  1         1    4    1
Run Code Online (Sandbox Code Playgroud)