2017-09-22 4 views
0

En R J'ai un dataframe avec 2 colonnes, x et y, les endroits que je dois modifier:Convert 2 colonne des données r à heatmap

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

Mon cadre de données réelles a des milliers de valeurs. Je souhaite d'abord ajouter une troisième colonne pour montrer le nombre si des incidences où des valeurs particulières de x et de y se produisent. Par exemple, si des lignes contenant x = 2 et y = 5 sont trouvées deux fois, nous supprimons l'une de ces lignes et placons un 2 dans la troisième colonne de la ligne.

J'ai alors besoin de modifier cette trame de données à 3 colonnes en une matrice où la valeur de la troisième colonne est la valeur dans le tableau à la ligne (x) et la colonne (y). En fin de compte, il s'agit de produire une série de heatmaps, ces formats particuliers semblent les meilleurs pour tester quelques paquets. J'ai fait quelques tentatives moi-même mais n'ai pas eu de chance.

Répondre

1

Ceci peut être réalisé en utilisant data.table comme suit:

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

Merci beaucoup. C'est vraiment un paquet dont je vais apprendre plus sur! – Caffrey