2016-04-09 61 views
-1

我正在爲預測目的創建分類模型。我有幾個ext文件,我把它們轉換成了一個包含幾個列表(稱爲comb)的大列表。然後,我把大列表分成一個單獨的數據框,每個列表作爲它自己的列(稱爲BI)。因爲每個列表可能包含不同數量的元素,所以更簡單的參數矩陣(unlist(l),ncol = ncol)不起作用。在審查的替代品,我做了修改,編譯如下:將零加到R中前x行的列中

max_length <- max(sapply(comb,length)) 

BI<-sapply(comb, function(x){ 
c(x, rep(0, max_length - length(x))) 
}) 

這將創建一個數據幀分配每個列表中的列並指定該列中的每個元素缺失的值爲零。那些零顯示在該列的末尾,但我希望它們位於列的開頭。下面是電流輸出的一個例子:

cola colb colc 
2 2 2 
1 1 0 
4 0 0 

我需要你在把我原來的代碼生成以下格式的幫助:

acola colb colc 
2 0 0 
1 2 0 
4 1 2 
+0

原始列表'comb'在哪裏?這似乎有點重要 –

+0

你想要什麼都是全部零,如果有的話,「在每列的頂部」?你可以用'dput'發佈你的列表嗎? –

+0

@VincentBonhomme&Hadd E. Nuff輸入是一個很大的輸出,但基本上梳是15個列表(所有數字,不同數量的元素,數字範圍從0到18000)的列表。 – sfyn

回答

0

這可能足以交匯處串聯c順序:

max_length <- max(sapply(comb, length)) 

BI <- sapply(comb, function(x){ 
    c(rep(0, max_length - length(x)), x) 
}) 

編輯:基於在評論其他信息下面,這是一種以另一種方式修改代碼的方法。這個想法是,只要你的第一種方法給你一個合適的數據幀,我們可以通過使用 -函數來避開這個問題。

max_length <- max(sapply(comb,length)) 

BI <- sapply(comb, function(x){ 
    .zeros <- rep(0, max_length - length(x)) 
    .rearange <- order(c(1:length(x), .zeros)) 
    c(x, .zeros)[.rearange] 
}) 

我已經測試了這個代碼工作在我 創建一個小測試的例子,但這個例子類似我不能確定你的 comb ...

如果該修訂方法不工作,那麼它仍然有可能 首先創建與您的原始代碼的數據幀,然後 然後重新排序一列。

+0

沒有不完全。這又將BI變成了一個列表。 – sfyn

+0

但是,如果我們有一個列表,那麼我認爲我們可以在其上使用'data.frame'來創建所需的結果。 –

+0

我曾嘗試將其轉換爲數據框,但在原始響應中沒有提及它。我得到這個錯誤'Data.frame中的錯誤(c(49.04,48.7,48.049997,48.069997,48.379999,48.259999,: 參數意味着不同的行數:4666,2686,4431,4627'。這個不同的行數是同樣的問題,我原來的代碼試圖解決,所以我們回到了第一。 – sfyn