R 将连续变量转换为二进制变量

R 将连续变量转换为二进制变量,r,binary,cut,categorical-data,R,Binary,Cut,Categorical Data,我试图用cut函数将连续变量转换为R中的分类变量的二进制列。代码是 xyz=rnorm(20,3,1) xcut=cut(xyz,breaks=c(2,3)) 这将xyz转换为分类变量,但我希望有三个二进制列,其中列名为'3',如果xyz[1]为1.5,则第一行值为1、0和0,我需要这三个值来表示xyz的所有20个值。我不想使用for和if循环来创建这个20x3矩阵,我已经可以用xyz以数字方式完成了。我想知道是否有一个较短的方法可以做到这一点?我们可以使用表格 xcut &l

我试图用
cut
函数将连续变量转换为R中的分类变量的二进制列。代码是

    xyz=rnorm(20,3,1)
    xcut=cut(xyz,breaks=c(2,3))

这将
xyz
转换为分类变量,但我希望有三个二进制列,其中列名为'3',如果
xyz[1]
为1.5,则第一行值为1、0和0,我需要这三个值来表示
xyz
的所有20个值。我不想使用for和if循环来创建这个20x3矩阵,我已经可以用
xyz
以数字方式完成了。我想知道是否有一个较短的方法可以做到这一点?

我们可以使用
表格

xcut <- cut(xyz,breaks=c(-Inf,2,3, Inf), labels = c("<2", "2-3", ">3"))
table(seq_along(xcut), xcut)

xcut我们可以使用
table

xcut <- cut(xyz,breaks=c(-Inf,2,3, Inf), labels = c("<2", "2-3", ">3"))
table(seq_along(xcut), xcut)

xcut解决方案之一是使用无监督离散化。它完全基于连续属性的观察分布。以下是2个函数及其用法示例:

# 1. Functions

# 1.1. Equal-width discretization for a single attribute
disc_width <- function(v, k = 5) {
  w <- diff(r <- range(v)) / k
  c(r[1], seq(r[1] + w, r[2] - w, w), r[2])
}

# 1.2. Equal-frequency discretization for a single attribute
disc_freq <- function(v, k = 5) {
  v <- v[!is.na(v)]
  r <- range(v)
  f <- unique(quantile(v, seq(1/k, 1-1/k, 1/k))) 
  c(r[1], f, r[2])
}

# 2. Usage

# 2.1. Feature
x <- mtcars$mpg

# 2.2. Range of feature 'x'
range(x)

# 2.3. Equal-width discretization
disc_width(x, 4)

# 2.4. Equal-frequency discretization
disc_freq(x, 5)
#1。功能
# 1.1. 单个属性的等宽度离散化

圆盘宽度解决方案之一是使用无监督离散化。它完全基于连续属性的观察分布。以下是2个函数及其用法示例:

# 1. Functions

# 1.1. Equal-width discretization for a single attribute
disc_width <- function(v, k = 5) {
  w <- diff(r <- range(v)) / k
  c(r[1], seq(r[1] + w, r[2] - w, w), r[2])
}

# 1.2. Equal-frequency discretization for a single attribute
disc_freq <- function(v, k = 5) {
  v <- v[!is.na(v)]
  r <- range(v)
  f <- unique(quantile(v, seq(1/k, 1-1/k, 1/k))) 
  c(r[1], f, r[2])
}

# 2. Usage

# 2.1. Feature
x <- mtcars$mpg

# 2.2. Range of feature 'x'
range(x)

# 2.3. Equal-width discretization
disc_width(x, 4)

# 2.4. Equal-frequency discretization
disc_freq(x, 5)
#1。功能
# 1.1. 单个属性的等宽度离散化

我倾向于使用
model.matrix
这里:
model.matrix(~0+xcut)
我倾向于使用
model.matrix
这里:
model.matrix(~0+xcut)