我将数据存储在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
功能。
答案 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