【发布时间】:2019-02-22 19:14:26
【问题描述】:
非常基本,但我认为我并不真正理解变化:
library(dplyr)
library(lubridate)
Lab_import_sql <- Lab_import %>%
select_if(~sum(!is.na(.)) > 0) %>%
mutate_if(is.factor, as.character) %>%
mutate_if(is.character, funs(ifelse(is.character(.), trimws(.),.))) %>%
mutate_at(.vars = Lab_import %>% select_if(grepl("'",.)) %>% colnames(),
.funs = gsub,
pattern = "'",
replacement = "''") %>%
mutate_if(is.character, funs(ifelse(is.character(.), paste0("'", ., "'"),.))) %>%
mutate_if(is.Date, funs(ifelse(is.Date(.), paste0("'", ., "'"),.)))
编辑:
感谢大家的投入,这是可重现的代码和我的解决方案:
library(dplyr)
library(lubridate)
import <- data.frame(Test_Name = "Fir'st Last",
Test_Date = "2019-01-01",
Test_Number = 10)
import_sql <-import %>%
select_if(~!all(is.na(.))) %>%
mutate_if(is.factor, as.character) %>%
mutate_if(is.character, trimws) %>%
mutate_if(is.character, list(~gsub("'", "''",.))) %>%
mutate_if(is.character, list(~paste0("'", ., "'"))) %>%
mutate_if(is.Date, list(~paste0("'", ., "'")))
【问题讨论】:
-
鉴于您使用了多少个 dplyr 函数,我认为此时您可以加载
library(dplyr) -
由于 dplyr 更新而更新非常旧的代码,我一定会导入它。
-
文档建议使用
list和匿名函数的公式语法。喜欢这里mutate_if(is.character, list(~ifelse(is.character(.), trimws(.),.))。没有样本数据就无法测试 -
不完全清楚为什么在
mutate_if(is.character,...)内部使用的函数中使用ifelse(is.character(.),...)?这不是多余的吗?可重现的例子会很棒,谢谢... -
例如
mutate_if(is.character, funs(ifelse(is.character(.), trimws(.),.)))不能只是mutate_if(is.character,trimws)... ???