【问题标题】:How to create new polynomial transformation variables that have their own names如何创建具有自己名称的新多项式变换变量
【发布时间】:2016-02-23 17:55:06
【问题描述】:

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

【问题讨论】:

    标签: r loops dataframe


    【解决方案1】:

    这是怎么做的:

    按多项式顺序的第一个类型:

    poly_order <- 2
    

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

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

    【讨论】:

    • 谢谢@Matt74,是否有可能将旧名称添加为新数据框的一部分?例如:将 poly_1 改为 balls_1 ?
    • 是的,看看上面写着"poly_" - 这是一个字符串变量,可以用“balls_”替换
    • 我的意思是,如果我可以自动完成,那么每个新变量都会获得与之相关的旧变量名,并在每个变量的开头添加“poly_”?
    • 另外,您能否详细解释一下“stats::poly(dat$balls, poly_order)”,如果有直接短语如:“dat$balls”,如何将其应用于所有列“。谢谢@Matt74
    • 不知道你说的“应用于所有列”是什么意思,但是在poly()函数中,可以使用同样的[表示法,如下:myvar &lt;- "balls"; stats::poly(dat[,myvar], poly_order)跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 2021-12-13
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多