我正在尝试将因子变量转换为二进制/ 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
为此,我尝试了以下方法,但收效甚微。
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/