具有新矢量名称的列矢量的R组合作为原始矢量的组合

时间:2017-05-30 08:38:03

标签: 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 ......等等

我最接近的是通过' for循环的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

1 个答案:

答案 0 :(得分:0)

一个选项是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)