检查 data.frame 列中的所有值是否都是子集虚拟变量的整数,也就是列中的所有值是否为 TRUE?

check if all values in data.frame columns are integers to subset dummy variables aka are all values in a column TRUE?

我想知道是否有更简单的子集 data.frame` 整数列的方法。

我的目标是修改 data.frame 中的数字列而不触及纯整数列(在我的例子中包含 0 或 1)。整数列最初是变成虚拟变量的因子水平,应该保持原样。所以我想暂时删除它们。

为了区分数字列和整数列,我使用了此处的 OP 版本 (Check if the number is integer)。

但是 is.wholenumber returns 一个 TRUE/FALSE 的矩阵而不是像 is.numeric 那样每列一个值,因此 sapply(mtcars, is.wholenumber) 对我没有帮助。我想到了以下解决方案,但我认为一定有更简单的方法吗?

data(mtcars)
is.wholenumber <- function(x, tol = .Machine$double.eps^0.5)  abs(x - round(x)) < tol
integer_column_names <-  apply(is.wholenumber(mtcars), 2, mean) == 1
numeric_df <- mtcars[, !integer_column_names]

您可以使用 dplyr 实现如图所示 here

library(dplyr)

is_whole <- function(x) all(floor(x) == x)

df = select_if(mtcars, is_whole)

或以 R 为基数

df = mtcars[ ,sapply(mtcars, is_whole)]