检查 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)]
我想知道是否有更简单的子集 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)]