r-如何根据特定条件删除列



我想根据某些条件删除列。

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)]

最新更新