2014-04-15 54 views
1

我有一個數據幀,看起來像這樣:是否expand.grid總是以相同的方式命令結果?

df <- data.frame(engine = c(1001, 1001, 1002, 1003), 
       failure = c(1, 2, 3, 4), week = c(7, 2, 1, 3)) 

我想創建包含故障的每個組合的表,以使得組合包含每個發動機一個故障。

這我一直在使用一個循環和expand.grid函數來完成:

engines <- unique(df["engine"]) 
failure_list <- list() 
for (i in 1:dim(engines)[1]){ 
    failure_temp <- df["failure"][(df["engine"] == toString(engines[i,1]))] 
    failure_list <- c(list(failure_temp), failure_list) 
} 
failure_combinations <- data.frame(t(expand.grid(failure_list)))` 

最後,我想創建一個week_combinations數據幀,這將是類似於failure_combinations數據幀,但其中的故障次數應該用df數據框中相應的星期編號替換。我可以通過簡單地修改我expand.grid環,使其看起來像這樣做:

engines <- unique(df["engine"]) 
failure_list <- list() 
week_list <- list() 
for (i in 1:dim(engines)[1]){ 
    failure_temp <- df["failure"][(df["engine"] == toString(engines[i,1]))] 
    failure_list <- c(list(failure_temp), failure_list) 
    week_temp <- df["week"][(df["engine"] == toString(engines[i,1]))] 
    week_list <- c(list(week_temp), week_list) 
} 
failure_combinations <- data.frame(t(expand.grid(failure_list))) 
week_combinations <- data.frame(t(expand.grid(week_list)))` 

現在,這樣做我得到這些數據幀:

failure_combinations

X1 X2 
4 4 
3 3 
1 2 

week_combinations

X1 X2 
3 3 
1 1 
7 2 

似乎工作正常,但唯一的我擔心的是由於某種原因expand.grid函數將以不同的順序排列和week_combinations數據幀中的列,即failure_combinations$X1將不對應於week_combinations$X1。這對我來說非常重要,因爲我計劃使用week_combinations來檢查哪個failure_combination產生最分散的時間分佈。

我已經做了一些檢查,到目前爲止在兩個數據框中的順序總是相同的,但是,相信並不好,我需要知道:)!

感謝您的回覆。

+0

如果您擔心,您可以在處理完數據後明確訂購數據。我建議在'plyr'包中安排'排列'以便按一列或多列排序數據幀。 –

+1

爲確保兩個數據框中列的順序相同,可以將'colnames(df1)'作爲輸入傳遞給df2,例如'DF2 <-df2 [,colnames(DF1)]' – OdeToMyFiddle

回答

0

Expand.grid似乎與按指定順序的排序第一序列的邏輯排序順序,那麼第二個分類中specifed序列等等 - 這是我剛跑到顯示此

測試
#test expand.grid 

a=seq(1,3,1) 
b=seq(4,6,1) 
c=seq(7,9,1) 

abc<-expand.grid(A=a,B=b,C=c) 

我發現這個正確的前面是很快,然後通過三個或四個鍵排序幾百萬記錄!

0

有時你可以找到有關的文件中的函數的信息,?expand.grid告訴我們

第一個因素變化最快的。

後來

轉換爲一個因子與在它們出現在 字符向量(而不是按字母順序,如最常見的時 轉化爲因子)的順序水平完成。

相關問題