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

R 基于另一个向量创建平均替换值向量,r,pandas,R,Pandas,在我的工作中,需要“离散化”的连续向量并不少见。我想做的是用另一个变量在这些切割范围内的平均值替换一个连续变量的值,该连续变量已被cut离散化 编辑 此外,平均值(或我想用来生成值的任何其他函数)必须基于原始数据并应用于新数据。想象一下,我在训练数据集上计算一个连续变量的平均不良率,建立一个模型,然后将相同的转换逻辑应用于新数据 结束编辑 考虑以下数据: x <- rnorm(100) x.disc <- cut(x, c(-Inf, -2, 0, 2, Inf)) lookup &

在我的工作中,需要“离散化”的连续向量并不少见。我想做的是用另一个变量在这些切割范围内的平均值替换一个连续变量的值,该连续变量已被
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
期望输出:

> head(x1)
[1] -0.6968720  0.8671428 -0.6968720  0.8671428  0.8671428 -0.6968720
pandas
中,对于
python
有一个分组应用范例,它使用
transform
将聚合值广播回与输入相同的维度。对于
R
,有类似的东西吗?为了便于理解,我希望将其保留为基本函数,但不反对使用其他软件包。

您可以尝试:

   x.disc <- cut(x, c(-Inf, -2, 0, 2, Inf), labels=FALSE)
   lookup <- aggregate(x, list(x.disc), mean)
   lookup$x[x.disc]

x.disc你只是想要
ave(x,x.disc,FUN=mean)
?(因此不使用查找)或可能是
lookup$x[匹配(x.disc,lookup$Group.1)]
是的,谢谢您的建议。我应该澄清(并将在编辑中澄清)我需要能够将我设计的任何转换应用于新数据。因此,我必须以某种方式保存查找信息,以便以后使用。
   x.disc <- cut(x, c(-Inf, -2, 0, 2, Inf), labels=FALSE)
   lookup <- aggregate(x, list(x.disc), mean)
   lookup$x[x.disc]