假设我有一个包含m
个变量的数据框,我怎样才能让他们生成的变量达到n
的幂?例如,df
是一个包含2个变量a
和b
的数据框:
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
我该怎么做?
答案 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