首页 > 解决方案 > 如何使用高阶函数重命名我自己的函数中的列?

问题描述

概述

我有一些列,其中观察值都用大写字母表示,例如“NORWALK”。但是,我编写了一个函数来转换观察结果,因此它们只有首字母大写,例如“Norwalk”。

代码

library(dplyr)
capitalizeColumn <- function(dataSet, c) { # c for column
  dataSet%>%
    mutate(c = tolower({{c}}))%>%
    mutate(c = toTitleCase(c))
}
df3 <- df3 %>%
  capitalizeColumn(ResidenceCity)%>%
  rename_all(recode, c= "ResidenceCity")

但是,此代码输出一个名为“c”的列,而我希望它输出原始列的名称,在本例中为“ResidenceCity”。现在我必须使用函数rename_all稍后重命名列,但我希望它在我的capitalizeColumn函数中。我尝试在我的函数中使用一些不同的高阶函数,但到目前为止没有任何效果。

标签: rfunctiondplyrrenamecapitalization

解决方案


@akrun 的答案是dplyr基于解决方案的正确答案(我赞成它),但由于 tidyverse 依赖非标准评估,Base R 中的事情有时比 tidyverse 更容易。这是处理数据框中多列的函数的 Base R 版本。

city <- c("CHICAGO","NEW YORK","LOS ANGELES", "DETROIT")
state <- c("ILLINOIS","NEW YORK","CALIFORNIA","MICHIGAN")
data <- data.frame(city,state,stringsAsFactors = FALSE)
capitalizeColumns <- function(df,vars){
     require(tools)
     for(v in vars) df[[v]] <- toTitleCase(tolower(df[[v]]))
     df
}
capitalizeColumns(data,c("city","state"))

...和输出:

> capitalizeColumns(data,c("city","state"))
         city      state
1     Chicago   Illinois
2    New York   New York
3 Los Angeles California
4     Detroit   Michigan
> 

推荐阅读