R:在poly()函数的lapply()之后绑定列



我想将包含多项式的列添加到数据帧(DF(中。

背景:我需要在glmnet设置中使用多项式。我不能在glmnet((估计命令中直接调用poly((。我得到了一个错误,可能是因为我的"Xtrain"数据包含因素。我的解决方法是将我的Xtrain DF分为两部分,一部分包含所有因素(不需要转换(,另一部分包含其余因素,即数字列。

现在,我想将带有多项式的列添加到我的数字DF中。这是我的问题的一个小例子。

# Some data
x <- 1:10
y <- 11:20
df = as.data.frame(cbind(x,y))
# Looks like this
x  y
1   1 11
2   2 12
3   3 13
# Now I generate polys
lapply(df, function(i) poly(i, 2, raw=T)[,1:2])

然而,我不知道如何"cbind"结果。我最终想要的是一个DF,其中包含x,x^2,y,y^2。秩序并不重要。然而,理想情况下,我也会有列标签(以识别多边形(。例如:

x x2 y  y2
1   1 1 11 121
2   2 4 12 144
3   3 9 13 169

谢谢。。。干杯

另一个选项是

as.data.frame(lapply(df, function(i) poly(i, 2, raw=T)[,1:2]))
#   x.1 x.2 y.1 y.2
#1    1   1  11 121
#2    2   4  12 144
#3    3   9  13 169
# ...

正如@gpier和@akrun已经提到的,您可以使用^而不是poly

n <- 2
df[paste(names(df), n, sep = "_")] <- df^n
df

我们可以使用do.call

do.call(cbind, lapply(df, function(i) poly(i, 2, raw=T)[,1:2]))

如果我们只需要正方形

cbind(df, as.matrix(df)^2)
如果需要平方,

poly不是正确的函数。尝试

cbind(df,lapply(df, function(x) x^2))
x  y   x   y
1   1 11   1 121
2   2 12   4 144
3   3 13   9 169
4   4 14  16 196
5   5 15  25 225
6   6 16  36 256
7   7 17  49 289
8   8 18  64 324
9   9 19  81 361
10 10 20 100 400

编辑:事实上,你甚至不需要lapply,你可以使用cbind(df, df^2)

相关内容

最新更新