r - 自动将二进制变量编码为因子?

标签 r boolean r-factor

我有一个问题:是否有 R 函数可以自动将二进制变量编码为因子?

我有超过 80 个变量(列),其中许多是 boolean 性质的(0、1 和 NA),R 作为数字导入。因为我想避免将它们手动转换为因子,所以我想知道是否有一个函数能够自动检测 data.frame 中的二进制数值变量 (或 tibble )并将它们转换为因子?我可以自己创建这样一个函数,但如果它已经存在,何必呢?

最佳答案

下面我们假设一个列只要是二元的就认为是

  • 它不全是 NA 并且
  • 除了 NA 之外,它仅由数字 0 和 1 值组成。

请注意,完全为 0 和 NA 或完全为 1 和 NA 的列被视为二进制,但如果这是不希望的,我们将展示如何更改代码以要求二进制列同时具有 0 和 1。

首先定义一个函数is_binary,定义一个列是否被认为是二进制的。如果你想改变二进制的定义,这个函数可以改变。如果一列必须同时具有 0 和 1 才能将其视为二进制,请特别将下面代码中的 1:2 更改为 2。如果需要,其他定义也是可能的。

接下来将 is_binary 应用于每一列,返回一个逻辑向量 ok,如果该列是二进制的,则每列一个分量为 TRUE,否则为 FALSE。

在计算答案 DF2 的行中,我们使用参数 levels = 0:1factor 应用于每个二进制列,以确保列只有 0 或只有 1 的仍然有两个级别。

没有使用包。

DF <- data.frame(a = c(0:1, NA), b = 1:3, c = NA, d = 0) # test data frame

is_binary <- function(x) {
  x0 <- na.omit(x)
  is.numeric(x) && length(unique(x0)) %in% 1:2 && all(x0 %in% 0:1)
}
ok <- sapply(DF, is_binary)
DF2 <- replace(DF, ok, lapply(DF[ok], factor, levels = 0:1))

str(DF2)
## 'data.frame':   3 obs. of  4 variables:
##  $ a: Factor w/ 2 levels "0","1": 1 2 NA
##  $ b: int  1 2 3
##  $ c: logi  NA NA NA
##  $ d: Factor w/ 2 levels "0","1": 1 1 1

我们可以像这样交替使用 dplyr 和 is_binary:

DF %>% mutate(across(where(is_binary), ~ factor(., levels = 0:1)))

关于r - 自动将二进制变量编码为因子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65026376/

相关文章:

dictionary - 如何设置像 “Map<String, bool>”这样的 map

r - 从 R 中的因子变量创建逻辑变量

r - 如何将离散因子水平视为连续?

r - 任意重新排序 R 中的直方图列

r - 在 blogdown 中安装 Hugo 时出现 SSL 错误

r - 为什么 grepl 可以工作但 str_detect 不能根据行值进行变异?

php - 基本 boolean 逻辑——如何仅在另一个条件为真时测试条件

c# - 为 bool 实现 CompareAndSwap

r - 如何最小化 "lm"类对象的大小而不影响将其传递给 predict()

R:基于分类变量 *of 列表 * 创建虚拟变量