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