代码之家  ›  专栏  ›  技术社区  ›  user6528780

将2列r数据转换为热图

  •  0
  • user6528780  · 技术社区  · 7 年前

    在R中,我有一个包含两列的数据帧,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。

    最终这是要产生一系列的热图,这些特定的格式似乎是最好的测试出几个包。我自己也做了一些尝试,但没有运气。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Uwe    7 年前

    这可以通过使用 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