我想根据某些条件删除列。
library(data.table)
dt <- data.table(1:4, rep(TRUE, 4), c(TRUE, FALSE, TRUE, TRUE))
在这种情况下,我想删除全部为TRUE
的列。输出应为
# V1 V3
# 1 TRUE
# 2 FALSE
# 3 TRUE
# 4 TRUE
Filter()
是一个有用的函数,用于根据特定函数的求值结果是否为TRUE来选择数据帧的列。在您的情况下:
Filter(function(x) !all(x == TRUE), dt)
V1 V3
1: 1 TRUE
2: 2 FALSE
3: 3 TRUE
4: 4 TRUE
您可以使用子设置将它们从选择中排除
dt[,!sapply(dt, function(x) all(x==TRUE)), with=FALSE]
在这里,sapply(dt, function(x) all(x==TRUE))
部分查找所有值都为TRUE的列。然后我们否定它并使用with=FALSE
(因为这是一个data.table而不是data.frame)
在data.table
(2020-04-24)的当前开发版本上,我们可以在.SDcols
:中执行此操作
dt[ , .SD, .SDcols = function(x) !is.logical(x) || !all(x)]