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