基于另一个向量创建平均替换值的向量

时间:2014-09-11 14:54:33

标签: r pandas

在我的工作中,有一个需要“离散化”的连续向量并不罕见。我想要做的是将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有类似的东西吗?我想将它保留给基本功能以供我理解,但我不反对使用其他软件包。

1 个答案:

答案 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]