重新格式化数据以绘制二维连续热图

Reformatting data in order to plot 2D continuous heatmap

我将数据存储在 data.frame 中,我想将其绘制为连续热图。我尝试使用 akima 包中的 interp 函数,但由于数据可能非常大(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 包创建的二维直方图连续热图。以下是我认为转换后的数据的外观。如果我错了,请纠正我。

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

好像是 ldply,但我似乎无法弄清楚它是如何工作的。

忘了说了,$age的信息总是连续的、有规律的,比如列表age1等于age2但是age1 >= age2。我想这意味着它可能被归类为连续数据,不需要 interp 函数。

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