2015-07-01 83 views
0

我有存儲在data.frame中的數據,我想繪製爲連續熱圖。我試過使用akima包中的interp函數,但由於數據可能非常大(200萬行),如果可能的話,我想避免這種情況,因爲它需要很長時間。這裏是我的數據格式重新格式化數據以繪製2D連續熱圖

l1 <- c(1,2,3) 
grid1 <- expand.grid(l1, l1) 
lprobdens <- c(0,2,4,2,8,10,4,8,2) 
df <- cbind(grid1, lprobdens) 
colnames(df) <- c("age1", "age2", "probdens") 

age1 age2 probdens 
1  1  0 
2  1  2 
3  1  4 
1  2  2 
2  2  8 
3  2  10 
1  3  4 
2  3  8 
3  3  2 

我想將它格式化爲length(df$age1) x length(df$age2)矩陣。我收集到一旦以這種方式格式化後,我將能夠使用基本功能(如image)來繪製類似於使用akima包創建的二維直方圖連續熱圖。這是我認爲轉換的數據應該看起來的方式。如果我錯了,請糾正我。

1 2 3 
1 0 2 4 
2 2 8 8 
3 4 10 2 

看起來好像ldply但我似乎無法理清它是如何工作的。

我忘了提及,$年齡信息總是連續的和規則的,這樣,age1等於age2,但age1> = age2。我想這意味着它可以被歸類爲連續數據,並且不需要interp函數。

+0

你是如何得到最終產出的?我的意思是,它的理想目的是什麼?應急表? – SabDeM

+0

對不起,我感到困惑。我輸入了這種格式,因爲我認爲這可以用'image'繪製。最終結果應該是x軸上的age1和y軸上的age2以及以熱色繪製的熱量圖。這有幫助嗎? – Jesse

回答

0

好吧我想我得到你想要的。這只是一個用reshape的演員功能重塑數據的問題。 value.var參數僅用於避免R嘗試猜測要使用的值的警告消息。如果省略它,結果不會改變。

library(reshape2) 
as.matrix(dcast(dat, age1 ~ age2, value.var = "probdens")[-1]) 
    1 2 3 
[1,] 0 2 4 
[2,] 2 8 8 
[3,] 4 10 2 
+0

非常好!非常感謝。我可以在最後詢問'[-1]'的用途嗎? – Jesse

+0

因爲'dcast'輸出的第一列包含'age1'的值,當然如果你想讓它們忽略'[-1]'。我決定省略它,因爲實際上它們是1,2,3等,就像普通的行數一樣。這些數據可能是多餘的,但正如我所說的,對於不同的年齡,你必須保留它們。 – SabDeM