列矢量的R组合与新向量的名称作为原始向量的组合

  • 本文关键字:向量 组合 原始 新向量 r
  • 更新时间 :
  • 英文 :


对一个令人尴尬的简单问题表示歉意。我想在数据框架中创建所有列向量的组合,添加新向量并将其重命名为原始列向量名称的组合。

例如

  A B V3 V4 V5 V6
1 1 3  1  3  3  9
2 2 4  4  8  8 16
3 3 5  9 15 15 25

我希望v3被命名为a a,v4为a b,v5为b*a ... etc

我最接近的是通过" for Loop"的Python解决方案。有意义,但是命名列的R语法是什么?

df<-data.frame(x1=1:3,x2=3:5)
for (i in 1:ncol(df)){
  for (j in 1:ncol(df){
    df[i,"-",j]<-df([,i]*df[,j])
  }
}

另外,我可以使用sapply而不是循环,但我仍然被重命名新列:

df<-data.frame(x1=1:3,x2=3:5)
a[3:6]<-sapply(a[1:2],"*",a[1:2])

非常感谢,lr

一个选项是 expand.grid

d1 <- expand.grid(names(df), names(df))
df[do.call(paste0, d1)] <- apply(d1, 1, FUN = function(x) do.call(`*`, df[x]))
df
#  x1 x2 x1x1 x2x1 x1x2 x2x2
#1  1  3    1    3    3    9
#2  2  4    4    8    8   16
#3  3  5    9   15   15   25

或其他选项是

do.call(polym, c(df, degree = 2, raw = TRUE))

poly(as.matrix(df), degree = 2, raw = TRUE)

最新更新