重新格式化数据以绘制2D连续热图

时间:2015-07-01 19:11:39

标签: r histogram

我将数据存储在data.frame中,我想将其绘制为连续热图。我已尝试使用interp包中的akima函数,但由于数据可能非常大(200万行),我希望尽可能避免这种情况,因为它需要很长时间。这是我的数据格式

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包创建的2D直方图连续热图。以下是我认为转换后的数据应该如何。如果我错了,请纠正我。

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

似乎ldply似乎无法理清它是如何运作的。

我忘了提及,$ age信息总是连续且有规律的,因此列表age1等于age2但age1&gt; = age2。我想这意味着它可以被归类为连续数据,并且不需要interp功能。

1 个答案:

答案 0 :(得分:0)

好的,我想我得到了你想要的东西。这只是用reshape s'转换函数重塑数据的问题。 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