使用R中DBI::dbGetQuery()获取数据时自动去除尾随空白可行吗?
关于DBI::dbGetQuery()自动去除字符列尾随空白的问题
1. 是否有自动去除尾随空白的方法?
目前DBI包本身并没有提供类似utils::read.table(strip.white = TRUE)的全局参数,能在调用dbGetQuery()时自动去除字符列的尾随空白。
不同数据库的驱动(比如SQLite、MySQL、PostgreSQL等)可能有各自的配置选项,但由于你使用的是他人管理的数据库,无法修改驱动的全局配置或数据库端的设置,因此没有通用的自动处理方式能直接在获取数据时完成去空白操作。
2. 手动处理方式是否可行?
你给出的手动处理方式是完全可行的,不过可以针对需求做一点优化:
- 原代码中
trimws(which = "left")是去除左侧空白,如果你需要的是去除尾随空白,应该改为which = "right";如果需要同时去除首尾空白,直接使用trimws()默认参数即可(默认which = "both")。 - 原生R的这种批量处理逻辑只会对字符列生效,不会干扰数值列或其他类型的列,安全性和可靠性都有保障。
优化后的示例代码:
# 只去除尾随空白 idx <- sapply(a, is.character) a[idx] <- lapply(a[idx], trimws, which = "right") # 验证结果 sapply(a, nchar) # x y z # [1,] 1 1 1 # [2,] 1 1 1 # [3,] 1 1 1
如果习惯用tidyverse语法,也可以用更简洁的写法:
library(dplyr) a <- a %>% mutate(across(where(is.character), trimws, which = "right"))
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

