我想添加基于我所拥有的连续变量进行多项式变换的新变量。我知道如何手动(dat$balls_poly<-poly(dat$balls,2)
但我怎么能为100多个变量做到这一点?
dat <- read.table(text = " category balls sticks shirts
yes 3 9 7
no 3 8 4
no 1 2 8
yes 1 2 3
yes 1 8 3
no 6 1 2
yes 6 7 1
no 6 1 5
yes 5 9 7
no 3 8 7
no 4 2 7
yes 1 2 3
yes 7 6 3
no 6 1 1
yes 6 3 9
no 6 1 1 ",header = TRUE)
编辑: 我应用了这行代码:
dat[,paste0("poly_",1:poly_order)] <- stats::poly(dat$balls, poly_order)
得到了这个输出:
dat
category balls sticks shirts poly_1 poly_2
1 yes 3 9 7 -0.124409488 -0.33739571
2 no 3 8 4 -0.124409488 -0.33739571
3 no 1 2 8 -0.358592053 0.22632756
4 yes 1 2 3 -0.358592053 0.22632756
5 yes 1 8 3 -0.358592053 0.22632756
6 no 6 1 2 0.226864360 0.03981688
7 yes 6 7 1 0.226864360 0.03981688
8 no 6 1 5 0.226864360 0.03981688
9 yes 5 9 7 0.109773077 -0.24896031
10 no 3 8 7 -0.124409488 -0.33739571
11 no 4 2 7 -0.007318205 -0.37469784
12 yes 1 2 3 -0.358592053 0.22632756
13 yes 7 6 3 0.343955643 0.49163375
14 no 6 1 1 0.226864360 0.03981688
15 yes 6 3 9 0.226864360 0.03981688
16 no 6 1 1 0.226864360 0.03981688
我想知道如果我能得到这个输出(为了简化显示只显示第一行):
dat
category balls sticks shirts poly_balls poly_stics poly_shirts
1 yes 3 9 7 9 81 49
答案 0 :(得分:4)
以下是如何操作:
首先按多项式的顺序输入:
poly_order <- 2
然后使用[
而不是$
分配新列。因为paste0
是矢量化的,所以它会添加与多项式一样多的列。
dat[,paste0("poly_",1:poly_order)] <- stats::poly(dat$balls, poly_order)