为这个令人尴尬的简单问题道歉。我想在数据框中创建所有列向量的组合,添加新向量并将它们重命名为原始列向量名称的组合。
例如
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
答案 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)