用于重命名数据帧列的R函数

用于重命名数据帧列的R函数,r,function,scope,rename,R,Function,Scope,Rename,我有一个数据帧,比如说acs10。我需要重新标记这些列。为此,我创建了另一个数据框,名为labelName,有两列:第一列包含旧列名,第二列包含我要使用的名称,如下表所示: 第1列 第2列 旧标签1 新标签1 旧标签2 新标签2 在函数中,您需要返回更改后的数据帧 renameDF <- function(dataF,varName){ for (i in seq_len(nrow(varName))){ names(dataF)[names(dataF) == varName

我有一个数据帧,比如说acs10。我需要重新标记这些列。为此,我创建了另一个数据框,名为labelName,有两列:第一列包含旧列名,第二列包含我要使用的名称,如下表所示:

第1列 第2列 旧标签1 新标签1 旧标签2 新标签2
在函数中,您需要
返回更改后的数据帧

renameDF <- function(dataF,varName){
  for (i in seq_len(nrow(varName))){
    names(dataF)[names(dataF) == varName[i,1]] <- varName[i,2]
  }
  return(dataF)
}

这应该在一行中完成整个任务

colnames(acs10)[colnames(acs10) %in% labelName$column_1] <- labelName$column_2[match(colnames(acs10)[colnames(acs10) %in% labelName$column_1], labelName$column_1)]

colnames(acs10)[colnames(acs10)%in%labelName$column_1]如果列名不在数据字典中,这将起作用,但它有点复杂:

library(tibble)

df <- tribble(~column_1,~column_2,
"oldLabel1",    "newLabel1",
"oldLabel2",    "newLabel2")

d <- tibble(oldLabel1 = NA, oldLabel2 = NA, oldLabel3 = NA)

fun <- function(dat, dict) {
  names(dat) <- sapply(names(dat), function(x) ifelse(x %in% dict$column_1, dict[dict$column_1 == x,]$column_2, x))
  dat
}

fun(d, df)
库(TIBLE)

df您可以创建一个只包含在线代码的函数

renameDF <- function(df, varName){
  
  
  setNames(df,varName[[2]][pmatch(names(df),varName[[1]])])
  
  
}

renameDF虽然这个代码片段可以解决这个问题,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,而这些人可能不知道您的代码建议的原因。我确实尝试了返回函数,但除了简单地打印数据框外,列名保持不变。这适用于您建议的简化版本(没有for循环):只需打印,没有实际更改。但是,在函数外部使用命令行肯定会起作用。@yzhao数据帧在函数内部不会改变,您需要将函数指定给变量<代码>结果谢谢,现在一切都有意义了。
renameDF <- function(df, varName){
  
  
  setNames(df,varName[[2]][pmatch(names(df),varName[[1]])])
  
  
}