2017-09-22 2 views
0

In R habe ich einen Datenrahmen mit 2 Säulen, x und y-Positionen, die ich verändern müssen:Convert Spalte 2 R-Daten heatmap

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

My tatsächlichen Datenrahmen Tausende von Werten hat. Ich möchte zuerst eine dritte Spalte hinzufügen, um die Anzahl der Fälle anzuzeigen, in denen bestimmte x- und y-Werte auftreten. Wenn beispielsweise Zeilen mit x = 2 und y = 5 zweimal gefunden werden, entfernen wir eine dieser Zeilen und platzieren eine 2 in die dritte Spalte der Zeile.

Ich muss dann diese 3 Spalten Datenrahmen zu einer Matrix, wo der dritte Spaltenwert ist der Wert im Array bei Zeile (x) und Spalte (y) zu ändern.

Letztlich ist dies eine Reihe von Heatmaps zu produzieren, diese besonderen Formate scheinen die besten testen einige Pakete. Ich habe selbst einige Versuche unternommen, aber kein Glück gehabt.

Antwort

1

Dies kann data.table unter Verwendung wie folgt erreicht werden:

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 
+0

Sie viel so danken. Dies ist definitiv ein Paket, über das ich mehr erfahren werde! – Caffrey