我有一個數據幀,看起來像這樣:是否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
產生最分散的時間分佈。
我已經做了一些檢查,到目前爲止在兩個數據框中的順序總是相同的,但是,相信並不好,我需要知道:)!
感謝您的回覆。
如果您擔心,您可以在處理完數據後明確訂購數據。我建議在'plyr'包中安排'排列'以便按一列或多列排序數據幀。 –
爲確保兩個數據框中列的順序相同,可以將'colnames(df1)'作爲輸入傳遞給df2,例如'DF2 <-df2 [,colnames(DF1)]' – OdeToMyFiddle