R:在 lapply() poly() 函数之后绑定列
R: bind columns after lapply() the poly() function
我想将包含多项式的列添加到数据框 (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" 结果。我最终想要的是一个包含 x, x^2, y, y^2, 的 DF。顺序无关紧要。但是,理想情况下我也会有列标签(以识别多边形)。例如像这样:
x x2 y y2
1 1 1 11 121
2 2 4 12 144
3 3 9 13 169
谢谢...
干杯!
我们可以使用do.call
do.call(cbind, lapply(df, function(i) poly(i, 2, raw=T)[,1:2]))
如果我们只需要正方形
cbind(df, as.matrix(df)^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
如果您需要正方形,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)
我想将包含多项式的列添加到数据框 (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" 结果。我最终想要的是一个包含 x, x^2, y, y^2, 的 DF。顺序无关紧要。但是,理想情况下我也会有列标签(以识别多边形)。例如像这样:
x x2 y y2
1 1 1 11 121
2 2 4 12 144
3 3 9 13 169
谢谢... 干杯!
我们可以使用do.call
do.call(cbind, lapply(df, function(i) poly(i, 2, raw=T)[,1:2]))
如果我们只需要正方形
cbind(df, as.matrix(df)^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
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)