R:创建n次幂的变量

R:创建n次幂的变量,r,R,假设我有一个带有m变量的数据帧,我如何将它们生成的变量的幂次提高到n?例如,df是一个包含两个变量的数据帧a和b: df <- data.frame(a=c(1,2), b=c(3,4)) 我如何才能做到这一点?使用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

假设我有一个带有
m
变量的数据帧,我如何将它们生成的变量的幂次提高到
n
?例如,
df
是一个包含两个变量的数据帧
a
b

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

我如何才能做到这一点?

使用
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

df如果你有三列,会是
a^2*df[,c(“b”,“c”)]
还是每列都是自己的?@DavidArenburg每列都是自己的,这意味着添加
a^2,a*b,a*c,b^2,b*c,c^2,a^2*c,a*b^2,a*b*c,a*c^2,b^3
,谢谢你,它能工作。但是如何获得有意义的列名,比如
a.a.b
,而不是像
2.1
?它是微不足道的还是需要另一个复杂的功能?
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