在我的工作中,有一个需要“离散化”的连续向量并不罕见。我想要做的是将cut
离散的连续变量的值替换为另一个变量的平均值。
修改
此外,平均值(或我想用于生成值的任何其他函数)必须基于原始数据并应用于新数据。想象一下我在训练数据集上计算连续变量的平均不良率,构建模型然后必须将相同的转换逻辑应用于新数据的情况。
结束编辑
考虑以下数据:
x <- rnorm(100)
x.disc <- cut(x, c(-Inf, -2, 0, 2, Inf))
lookup <- aggregate(x, list(x.disc), mean)
> lookup
Group.1 x
1 (-Inf,-2] -2.2322429
2 (-2,0] -0.6968720
3 (0,2] 0.8671428
4 (2, Inf] 2.6696064
我想要做的是创建一个新的向量x1,其中当原始x值落在相应的范围内时,该值等于查找中的x值。我期望的输出向量看起来像这样:
> head(x)
[1] -0.1867972 1.7309683 -0.1306331 1.2787303 0.8388222 -0.4449465
期望的输出:
> head(x1)
[1] -0.6968720 0.8671428 -0.6968720 0.8671428 0.8671428 -0.6968720
在pandas
python
中,有一个逐个应用的范例,使用transform
将聚合值广播回与输入相同的维度。 R
有类似的东西吗?我想将它保留给基本功能以供我理解,但我不反对使用其他软件包。
答案 0 :(得分:1)
你可以尝试:
x.disc <- cut(x, c(-Inf, -2, 0, 2, Inf), labels=FALSE)
lookup <- aggregate(x, list(x.disc), mean)
lookup$x[x.disc]