R 连接或筛选多个列data.table

R 连接或筛选多个列data.table,r,data.table,R,Data.table,我的data.frame有几个列,我想用相同的grepl进行过滤 而不是 dt[!grepl(x=colA, pattern='goaway'),] dt[!grepl(x=colB, pattern='goaway'),] dt[!grepl(x=colC, pattern='goaway'),] dt[!grepl(x=colD, pattern='goaway'),] etc 我想做以下两件事 filterCols <- c('colA', 'colB', 'colC','colD

我的data.frame有几个列,我想用相同的
grepl
进行过滤

而不是

dt[!grepl(x=colA, pattern='goaway'),]
dt[!grepl(x=colB, pattern='goaway'),]
dt[!grepl(x=colC, pattern='goaway'),]
dt[!grepl(x=colD, pattern='goaway'),]
etc
我想做以下两件事

filterCols <- c('colA', 'colB', 'colC','colD')
dt[!grepl(x=paste0(get(filterCols), collapse=""), pattern="goaway"),]

filterCols我们可以使用
.SDcols
处理所选列。比如说:

library(data.table)
dt[, Reduce(`|`, lapply(.SD, grepl, pattern = 'goaway')), .SDcols = filterCols]
对于第二部分,同样

db[, (filterCols) := lapply(.SD, function(x) 
     zoo::na.locf(replace(x, x == "", NA))), .SDcols = filterCols]

欢迎来到StackOverflow!请阅读相关信息以及如何给出建议。这将使其他人更容易帮助你..谢谢你Ronak-这简直太棒了!我以前从未使用过reduce。翻阅文档,我不会想到我可以像使用二进制函数一样使用管道。
db[, (filterCols) := lapply(.SD, function(x) 
     zoo::na.locf(replace(x, x == "", NA))), .SDcols = filterCols]