将2列r数据转换为热图

时间:2017-09-22 13:18:32

标签: r heatmap

在R中,我有一个包含2列,x和y位置的数据框,我需要更改:

df = data.frame(x = c(1,3,2,6,2), y = c(2,1,5,3,5))

我的实际数据框有数千个值。我首先希望添加第三列来显示特定x和y值出现的发生率的数字。例如,如果找到x = 2和y = 5的行两次,那么我们删除其中一行并在行的第三列中放置一个2。

然后我需要将这个3列数据框改为矩阵,其中第三列值是行(x)和列(y)中数组中的值。

最终这是制作一系列热图,这些特殊格式似乎是最好的测试几个包。我自己做了一些尝试,但没有运气。

1 个答案:

答案 0 :(得分:1)

这可以通过使用data.table来实现,如下所示:

df = data.frame(x = c(1,3,2,6,2), y = c(2,1,5,3,5))

library(data.table)
setDT(df)[
  # count unique combinations of x-y-values
  , .N, by = .(x, y)][
    # fill missing to complete heatmap using cross join
    CJ(x = 1:max(x), y = 1:max(y)), on = .(x, y)][
      # replace NA
      is.na(N), N := 0][
        # reshape from long to wide
        , dcast(.SD, x ~ y)][
          # coerce to matrix
            , as.matrix(.SD), .SDcols = -"x"]
     1 2 3 4 5
[1,] 0 1 0 0 0
[2,] 0 0 0 0 2
[3,] 1 0 0 0 0
[4,] 0 0 0 0 0
[5,] 0 0 0 0 0
[6,] 0 0 1 0 0