重新格式化数据以绘制二维连续热图
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
我将数据存储在 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