动态重命名变量

标签 r

我有一个名为“schema”的文件。根据该文件,我需要重命名其他数据框。例如,TableA 的“Var1”需要重命名为“Col1”。同样,TableA的VarA需要重命名为ColA。简而言之,架构的“FROM”列中列出的所有变量都需要重命名为“To”列。

Schema <- read.table(header = TRUE, text = 
                  'Tables   From    To
                A   Var1    Col1
                A   Var2    Col2
                A   Var3    Col3
                B   VarA    ColA
                B   VarB    ColB
                B   VarC    ColC
                ')


A <- data.frame(Var1 = 1:3,
                  Var2 = 2:4,
                  Var3 = 3:5)

B <- data.frame(VarA = 1:3,
                VarB = 2:4,
                VarC = 3:5)

最佳答案

我们可以使用匹配:

lapply(list(A = A, B = B), function(i){
  setNames(i, Schema$To[ match(names(i), Schema$From) ])
 })

# $A
#   Col1 Col2 Col3
# 1    1    2    3
# 2    2    3    4
# 3    3    4    5
# 
# $B
#   ColA ColB ColC
# 1    1    2    3
# 2    2    3    4
# 3    3    4    5

或者:

Anew <- setNames(A, Schema$To[ match(names(A), Schema$From) ])
Bnew <- setNames(B, Schema$To[ match(names(B), Schema$From) ])

或者list2env :

list2env(lapply(list(A = A, B = B), function(i){
  setNames(i, Schema$To[ match(names(i), Schema$From) ])
  }), envir = globalenv())

编辑:当没有匹配的架构时,请按原样使用保留列名称:

list2env(lapply(list(A = A, B = B), function(i){
  # check if there is a match, if not keep name unchaged
  x <- as.character(Schema$To[ match(names(i), Schema$From) ])
  ix <- which(is.na(x))
  x[ ix ] <- names(i)[ ix ]
  # retunr with updated names
  setNames(i, x)
  }), envir = globalenv())

关于动态重命名变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59174269/

相关文章:

r - hclust 函数的聚类列表

r - 如何计算值在数据帧的列中出现的次数?

R Shiny DT::renderDataTable 被覆盖的 "Processing..."横幅卡住

r - 如何用晶格xyplot函数添加abline?

r - 使用 R 中的随机数字/字符提取/删除整数或字符串的一部分

R彩色树状图建议?

r - ggplot stat_quantile 中的分位数是什么?

r - lapply,c() 和 list() 的区别

r - 绘制 SVM 分类图时出错

r - 使用 drop=FALSE 分配给子矩阵对角线时出错