使用R中的“关系”数据框重命名列

问题描述 投票:2回答:2

我正在处理一个大型数据框(超过100列),我需要重命名这些列。假设感兴趣的数据帧看起来像这样:

      C     D     E     F     G     H
1    10   200    50    40    60    10
2    30   400    20    30    30    10
3    20    40    30    30    50    10

我还有一个“关系”数据帧,其中的行将原始列名与所需的新名称匹配,如下所示:

  Code  Name 
1 C     Cat  
2 D     Dog  
3 E     Emu  
4 F     Fish 
5 G     Goat 
6 H     Hog  

我正在寻找的是基本或打包函数,它允许我使用此匹配数据框来重命名原始列,从而产生如下所示的最终数据框:

    Cat   Dog   Emu  Fish  Goat   Hog
1    10   200    50    40    60    10
2    30   400    20    30    30    10
3    20    40    30    30    50    10

请记住,实际的应用程序具有大约100列以上的列,因此在这里希望尽可能减少手工编码的数量,谢谢!

r rename
2个回答
3
投票

可以用rename_at(假设列“ code”,“ Name”是关系数据集中的character类来完成)

library(dplyr)
df1 %>%
   rename_at(vars(relational$Code), ~ relational$Name)

或者另一个选项是setnames中的data.table

library(data.table)
setDT(df1)
setnames(df1, relational$Code, relational$Name)

或在base R中>

names(df1) <- setNames(relational$Name, relational$Code)[names(df1)]

数据

df1 <- structure(list(C = c(10L, 30L, 20L), D = c(200L, 400L, 40L), 
    E = c(50L, 20L, 30L), F = c(40L, 30L, 30L), G = c(60L, 30L, 
    50L), H = c(10L, 10L, 10L)), class = "data.frame", row.names = c("1", 
"2", "3"))

relational <- structure(list(Code = c("C", "D", "E", "F", "G", "H"), Name = c("Cat", 
"Dog", "Emu", "Fish", "Goat", "Hog")), class = "data.frame",
row.names = c("1", 
"2", "3", "4", "5", "6"))

0
投票

我们可以使用match,使列名与Code匹配并获得相应的Name

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