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

时间:2018-10-29 19:37:12

标签: r lapply poly

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

背景:我需要在glmnet设置中使用多项式。我无法在glmnet()估算命令中直接调用poly()。我收到一个错误,可能是因为我的“ Xtrain”数据包含因素。 我的解决方法是将Xtrain DF切成两部分,一个包含所有因子(无需任何变换),另一个包含其余因子,即。数字列。

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

Email sent to...

但是,我无法弄清楚如何“绑定”结果。我最后想要的是一个包含x,x ^ 2,y,y ^ 2的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])

谢谢... 干杯!

3 个答案:

答案 0 :(得分:2)

我们可以使用do.call

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

如果我们只需要正方形

cbind(df, as.matrix(df)^2)

答案 1 :(得分:2)

另一个选择是

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

答案 2 :(得分:1)

如果需要平方,

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)