R:创建最大幂为n的变量

时间:2014-09-01 13:54:42

标签: r

假设我有一个包含m个变量的数据框,我怎样才能让他们生成的变量达到n的幂?例如,df是一个包含2个变量ab的数据框:

df <- data.frame(a=c(1,2), b=c(3,4)) 

我想添加最高为3的变量,这意味着将这些生成的列添加到df

a^2, a*b, b^2, a^3, a^2*b, b^2*a, b^3 

我该怎么做?

1 个答案:

答案 0 :(得分:2)

使用polym

df <- data.frame(a=c(1,2), b=c(3,4)) 
#  a b
#1 1 3
#2 2 4

res <- do.call(polym, c(df, degree=3, raw=TRUE))
#     1.0 2.0 3.0 0.1 1.1 2.1 0.2 1.2 0.3
#[1,]   1   1   1   3   3   3   9   9  27
#[2,]   2   4   8   4   8  16  16  32  64
#attr(,"degree")
#[1] 1 2 3 1 2 3 2 3 3

编辑:

可以创建所需的列名:

colnames(res) <-  apply(
  do.call(rbind, 
          strsplit(colnames(res), ".", fixed=TRUE)),
  1,
  function(x) paste(rep(names(df), as.integer(x)), collapse="")
)

#     a aa aaa b ab aab bb abb bbb
#[1,] 1  1   1 3  3   3  9   9  27
#[2,] 2  4   8 4  8  16 16  32  64
#attr(,"degree")
#[1] 1 2 3 1 2 3 2 3 3