R 连接或筛选多个列data.table
我的data.frame有几个列,我想用相同的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
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]