r - 在R中将因子转换为二进制

标签 r

我正在尝试将因子变量转换为二进制/ bool 值(0或1)。

样本数据:

df  <-data.frame(a = c(1,2,3), b = c(1,1,2), c = c("Rose","Pink","Red"), d = c(2,3,4))

尝试像这样转换它:a,b,IsRose,IsPink,IsRed,d

Actuals Vs Expected Result

为此,我尝试了以下方法,但收效甚微。
library(ade4)
acm.disjonctif(df)

最佳答案

在基础R中,您可以在级别上使用sapply(),使用==检查状态,并使用as.integer()将其强制转换为二进制。

cbind(df[1:2], sapply(levels(df$c), function(x) as.integer(x == df$c)), df[4])
#   a b Pink Red Rose d
# 1 1 1    0   0    1 2
# 2 2 1    1   0    0 3
# 3 3 2    0   1    0 4

但是由于您有一百万行,因此您可能需要使用data.table。
library(data.table)
setDT(df)[, c(levels(df$c), "c") := 
    c(lapply(levels(c), function(x) as.integer(x == c)), .(NULL))]

这使
df
#    a b d Pink Red Rose
# 1: 1 1 2    0   0    1
# 2: 2 1 3    1   0    0
# 3: 3 2 4    0   1    0

如果需要,可以使用setcolorder(df, c(1, 2, 4:6, 3))重置列顺序。

关于r - 在R中将因子转换为二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33990760/

相关文章:

r - 如何加快 data.table 中的逐行操作

r - 有没有办法将自定义 R 功能操作添加到 DT 中的按钮?

R 理解 {caret} train(tuneLength = ) 和来自 {kernlab} 的 SVM 方法

java - 抑制控制台中的 rjava 错误输出

r - 使用 gcIntermediate 在 R 传单/Shiny 中映射跨越日期变更线的最短飞行路径

r - 测试元素是否在列表中并返回 0 或 1

r - 如何向向量字符串添加多个后缀

r - 分区统计 R(栅格/多边形)

r - knitr 中 R 代码块和 LaTeX 的全局变量

r - 将绘图窗口扩展到 ggplot 中 x 轴标签之外