如何创建具有自己名称的新多项式变换变量

时间:2015-11-21 06:14:25

标签: r loops dataframe

我想添加基于我所拥有的连续变量进行多项式变换的新变量。我知道如何手动(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

1 个答案:

答案 0 :(得分:4)

以下是如何操作:

首先按多项式的顺序输入:

poly_order <- 2

然后使用[而不是$分配新列。因为paste0是矢量化的,所以它会添加与多项式一样多的列。

dat[,paste0("poly_",1:poly_order)] <- stats::poly(dat$balls, poly_order)