如何仅用data.table方法移除data.table所有列中的指定$字符
移除data.table所有列中的$字符(原生方法实现)
需求说明
现有如下结构的data.table对象,$字符可能出现在任意列中,需要仅使用data.table原生方法清除所有$字符,示例数据:
dt <- data.table( "title"=c("First $Title", "Second Title", "Third Title", "Fourth Title"), "sha"=c("12345", "234543; 33423", "22222567$8;", "6666623; New$444"), "date" = c("1/1/2020","1/2/2020","1/3/2020","1/4/2020$") )
实现代码
使用data.table原生的按引用更新语法,配合.SD批量处理所有列,两种写法均可:
- 正则匹配模式(需转义特殊字符)
dt[, colnames(dt) := lapply(.SD, gsub, pattern = "\\$", replacement = "")]
- 字面量匹配模式(无需转义,性能更好)
dt[, colnames(dt) := lapply(.SD, gsub, pattern = "$", replacement = "", fixed = TRUE)]
处理结果
执行代码后打印dt,所有列中的$已被完全移除:
title sha date 1: First Title 12345 1/1/2020 2: Second Title 234543; 33423 1/2/2020 3: Third Title 222225678; 1/3/2020 4: Fourth Title 6666623; New444 1/4/2020
语法说明
:=是data.table特有的按引用修改运算符,操作时不会复制整个数据集,处理大表时性能优势明显.SD是data.table内置的特殊符号,默认指代当前操作范围下的所有列,搭配lapply可批量对每一列执行统一操作- 正则模式下
$是代表字符串结尾的元字符,必须通过\\转义才能匹配字面量的$;开启fixed=TRUE后会直接按传入字符串的字面意思匹配,不需要转义,匹配速度也更快。
内容的提问来源于stack exchange,提问作者Zach Fara
相关产品推荐
相关产品推荐

