我正在尝试编写一个使用 gsub 查找和替换某些字符串的函数。我有 10 多个 excel 电子表格,其中包含货币值列表,使用标准瑞典分隔符表示千位和小数,即小数用逗号而不是句点表示,千位分隔符是空格而不是逗号。英语中的 1,000.31 会变成瑞典语中的 1 000,31 吗?我正在尝试编写一个函数来消除千位分隔符所在的空格,并找到逗号并将其替换为句点。
正常的 gsub 函数工作正常:
df$Saldo <- gsub(",", ".", df$Saldo)
df$Saldo <- gsub(" ", "", df$Saldo)
但是,我需要在 10 多个数据帧上执行此操作,所以我认为编写一个可应用于每个数据帧的函数会更有效(下面提供了我尝试编写的函数以及可重现的示例)。这是我遇到问题的地方。我还应该提到我正在寻找一个 dplyr 解决方案。我使用该函数(如下)得到的错误是 Error: Quosures can only be unquoted in a quasiquotation context。
我承认,尽管我反复阅读了关于非标准评估和准引用的内容,但我仍然难以理解这些概念。我已阅读 dplyr 编程
https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html。
我也读过:
https://rlang.r-lib.org/reference/quasiquotation.html。
最后,我研究了几个关于堆栈溢出的模糊相似的问题/解决方案,但那里的解决方案似乎对我不起作用。大多数问题涉及让正则表达式工作,而不是让正则表达式在函数内部工作。
这是函数,例如:
library(dplyr)
replace_commas <- function(df1, c_name) {
c_name <- enquo(c_name)
df1 <- df1 %>% gsub(",", ".",!! c_name)
return(df1)
}
这是一个可重现的例子:
df <- data.frame(Date = c("2018-12-15", "2018-11-04", "2018-10-26"), Saldo = c("123 432,45", "87 546,23", "9 564,82"))
df_new <- replace_commas(df, Saldo)
我想要实现的直接目标是查找逗号并将逗号替换为句点的功能。但是,我也很感激有关如何在函数中包含正则表达式以删除不需要的空格的指针。