如何设置AND“&”多条件删除带“!”的行data.table 方式 R
How to set AND "&" multi conditions to remove rows with "!" data.table way R
一般去掉data.table的表达式,DT[!grepl("XXX",COLUMN),]
目标:删除符合3个条件的行
# Like : grepl("BB",RR) & grepl("XLKG",B) & grepl("GA",FF)
RR B FF
1: AA XLJ KA
2: BB XLKG CA
3: BB XLKG GA <----- remove this rows
4: BB XLKG FA
5: BB XLCC GA
# DATASET
DD <- data.table(RR=c("AA","BB","BB","BB","BB"),B=c("XLJ","XLKG","XLKG","XLKG","XLCC"),FF=c("KA","CA","GA","FA","GA"))
问题:下面的脚本无法应用多删除表达式
DD[!grepl("BB",RR) & grepl("XLKG",B) & grepl("GA",FF),][]
Empty data.table (0 rows) of 3 cols: RR,B,FF
我怎样才能做到这一点?
必须使用 grepl()
正如 Frank 和其他人已经指出的:你需要括号,所以你的否定是在否定整个论点,而不仅仅是第一部分。
此外,如果您必须使用 grepl()
,那么如果您不使用任何正则表达式,fixed = TRUE
将提高性能:
DD[!(grepl("BB", RR, fixed = TRUE) & grepl("XLKG", B, fixed = TRUE) & grepl("GA", FF, fixed = TRUE))]
RR B FF
1: AA XLJ KA
2: BB XLKG CA
3: BB XLKG FA
4: BB XLCC GA
一般去掉data.table的表达式,DT[!grepl("XXX",COLUMN),]
目标:删除符合3个条件的行
# Like : grepl("BB",RR) & grepl("XLKG",B) & grepl("GA",FF)
RR B FF
1: AA XLJ KA
2: BB XLKG CA
3: BB XLKG GA <----- remove this rows
4: BB XLKG FA
5: BB XLCC GA
# DATASET
DD <- data.table(RR=c("AA","BB","BB","BB","BB"),B=c("XLJ","XLKG","XLKG","XLKG","XLCC"),FF=c("KA","CA","GA","FA","GA"))
问题:下面的脚本无法应用多删除表达式
DD[!grepl("BB",RR) & grepl("XLKG",B) & grepl("GA",FF),][]
Empty data.table (0 rows) of 3 cols: RR,B,FF
我怎样才能做到这一点? 必须使用 grepl()
正如 Frank 和其他人已经指出的:你需要括号,所以你的否定是在否定整个论点,而不仅仅是第一部分。
此外,如果您必须使用 grepl()
,那么如果您不使用任何正则表达式,fixed = TRUE
将提高性能:
DD[!(grepl("BB", RR, fixed = TRUE) & grepl("XLKG", B, fixed = TRUE) & grepl("GA", FF, fixed = TRUE))]
RR B FF
1: AA XLJ KA
2: BB XLKG CA
3: BB XLKG FA
4: BB XLCC GA