2017-05-30 66 views
1

對於令人尷尬的簡單問題抱歉。我想在數據框中創建所有列向量的組合,添加新向量並將它們重命名爲原始列向量名稱的組合。帶有新向量名稱的列向量的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,V4是一個 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

一種選擇是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) 
+1

非常感謝@akrun。這是一種享受。 – Lymacro

+0

@Lymacro謝謝你的提示。你也可以勾選[here](https://stackoverflow.com/help/someone-answers) – akrun