r - 如何使用高阶函数重命名我自己的函数中的列?
问题描述
概述
我有一些列,其中观察值都用大写字母表示,例如“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函数中。我尝试在我的函数中使用一些不同的高阶函数,但到目前为止没有任何效果。
解决方案
@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
>
推荐阅读
- azure - Azure Web Functions Consuming SOAP 服务 - 如何使 async / WinHttpHandler 错误
- sql - 如何处理 postgres 全文搜索中的 Typo 错误
- python - 在 django python 中添加新卡之前,我如何检查 Stripe 客户是否已经拥有特定卡
- kotlin - Kotlin 多平台:kotlinx.coroutines.test 库在 commonTest 模块中不可见
- azure - Azure 数据工厂能否将数据发布到 Rest API
- ios - 如何使用 XHR (AJAX) 在 iOS12 上解决 ClientAbortException?
- html - 如何从
标签 [复制到剪贴板]
- java - Spring Batch Job 无明显原因停止
- marklogic - 如何在 Apache NiFi 的处理器中使用 ExecuteScriptMarkLogic?
- javascript - React Modal 确认无法正常工作