Gar*_*ett 1 currency r data-cleaning
我有一个非常大的数据集,其中一些列格式为货币,一些数字,一些字符.在读取数据时,所有货币列都被标识为因子,我需要将它们转换为数字.数据集太宽,无法手动识别列.我试图找到一种编程方式来识别列是否包含货币数据(例如,以'$'开头),然后传递要清理的列列表.
name <- c('john','carl', 'hank')
salary <- c('$23,456.33','$45,677.43','$76,234.88')
emp_data <- data.frame(name,salary)
clean <- function(ttt){
as.numeric(gsub('[^a-zA-z0-9.]','', ttt))
}
sapply(emp_data, clean)
Run Code Online (Sandbox Code Playgroud)
此示例中的问题是,此sapply适用于所有列,导致name列替换为NA.我需要一种方法来以编程方式识别clean函数需要应用于的列...在此示例中为salary.
使用dplyr和stringr包,您可以mutate_if用来标识具有以a开头的任何字符串的列,$然后相应地更改.
library(dplyr)
library(stringr)
emp_data %>%
mutate_if(~any(str_detect(., '^\\$'), na.rm = TRUE),
~as.numeric(str_replace_all(., '[$,]', '')))
Run Code Online (Sandbox Code Playgroud)