2017-01-27 57 views
0

以下是我當前面臨的問題: 我有96個觀察值(行)和16個變量(列)的數據框(我們稱之爲A)。 我還有一個由16個元素(A的16個變量中的每一個的係數)組成的9列向量(來自主成分分析)的旋轉。循環R:將輸出存儲在數據框中

的PCA旋轉保存爲這樣:

ph=prcomp(home[ ,3:17], scale. = TRUE) 
Home_vec=-round(ph$rotation[ ,1:9], 3) 

現在,奇我已經能夠通過物體Home_vec乘我的數據幀的行之一,並輸出等於由行乘以每個9個PC列,並應用cbind。

例如,行輸入:

TEAM=c(5, 1503, 26.31, 16.2, 0.099, 33, 28, 368, 35, 15, 84, 942, 528, 33, 315) 

我的新的輸出:

TEAM.1=round(TEAM*Home_vec,3) 

我已經創建了一個for循環,其執行步驟,對每個96個觀察在我的數據幀。

F=function(x){ 
    x*Home_vec 
} 

for(i in 1:96){ 
    print(F(home[i,2:17])) 
} 

唯一的問題是 - 我努力保存輸出(這是一個96×9的數據幀)作爲一個新的對象。

任何幫助,將不勝感激, 謝謝!

回答

1

嘗試做你的循環如下:

我現在用的是包dplyr。

x <- "" %>% data.frame 

for(i in 1:96){ 
y <- F(home[i,2:17])) 
x <- bind_rows(x,y) 
} 

x <- x %>% .[-1,-1] 
+0

Christiaan非常感謝你,這對我有效。 但是,當我在頂部爲底部的x代入等式時,它就起作用了。如果你不介意我問,究竟是什麼x <- x %>%。 [-1,-1]呢? –

+0

編輯:我意識到,頂線是必要的,道歉。我需要對代碼重新排序:底線放在第二位。我仍然對這兩行命令計算機做什麼感到好奇。 –

+0

在頂部,我創建了一個空數據框(1x1數據幀),然後在循環中將新行綁定到空數據框。最後一行刪除創建的空白數據框的第一行和第一列。 (在沒有最後一行的情況下運行循環,然後在運行最後一行之前查看x以查看會發生什麼) – Christiaan

相關問題