web-dev-qa-db-fra.com

Erreur: les index de colonne doivent être au plus 1 si ... heatmap.2

J'ai reçu une erreur dans heatmap.2 et j'ai trouvé une erreur similaire ici R: knnImputation Giving Error mais il n'a pas encore de réponse. Je ne pouvais pas comprendre le problème. Je suis nouveau dans ce monde, désolé d'avance s'il y a une erreur.

J'ai un dataframe df avec 144 lignes, 177 colonnes qui montre les moyennes mensuelles des années entre 2005-2016 par timeAverage fonction openair package.

Voici le petit exemple de df:

date        Year  Month  Adana-Catalan  Adana-Dogankent  Adana-Meteoroloji
2008/09/01  2008    9        NaN               NaN               NaN
2008/10/01  2008   10        NaN               NaN            1.7948718
2008/11/01  2008   11        NaN               NaN            2.0909091
2008/12/01  2008   12     1.2694064         12.2384106        0.7272727
2009/01/01  2009    1     2.3150358         12.7479339        10.3779762
2009/02/01  2009    2     2.8241107         18.4320175        2.4494949
2009/03/01  2009    3     2.0401606         8.4597523         1.6529412
2009/04/01  2009    4     1.8604651         4.8560000         1.1267606
2009/05/01  2009    5     2.1087719         1.8202247            NaN
2009/06/01  2009    6     4.0695103         2.1463415         1.1111111
2009/07/01  2009    7     5.4016393         8.1298905            NaN
2009/08/01  2009    8     0.1313869         16.9874411           NaN
2009/09/01  2009    9        NaN            5.3753943            NaN
2009/10/01  2009    10    1.6626506         8.8000000         1.8388889
2009/11/01  2009    11    1.4177632            NaN            3.9879154
2009/12/01  2009    12    0.9644128            NaN            5.0281457
2010/01/01  2010     1    0.2608696        4.0898876          3.1981424
2010/02/01  2010     2    0.7619048            NaN            4.3169811

supprimer les colonnes non numériques: 

df.monthly <- df[,-c(1:3)]  #remove non-numeric columns
df.monthly.un <- unlist(df.monthly)  #unlist the list
df.monthly.un[is.nan(df.monthly.un)] <- -999  #replace NaNs with -999

monthly.dim <- dim(df.monthly)
monthly.frame <- matrix(df.monthly.un, monthly.dim)  #convert unlist to matrix

j'ai ensuite calculé la matrice de distance et produit des dendogrammes. Enfin, j’ai utilisé heatmap.2 pour produire un heatmap avec des dendogrammes. 

monthly.dist <- dist(monthly.frame)
monthly.hclust <- hclust(monthly.dist, method="complete")

monthly.dist2 <- dist(t(monthly.frame))

colClust <- as.dendrogram(hclust(monthly.dist2, method="complete"))
rowClust <- as.dendrogram(monthly.hclust)

colpalette <- colorRampPalette(c("red","blue","green"))(n=100)

heatmap.2(monthly.frame, scale="none",
          col=colpalette, trace= "none", cexRow=0.6, cexCol=1,
          cex.main=0.7, key=T, Rowv=rowClust, labRow=df[,1],
          main=expression("2005-2016 SO"[2] * " (ug/m"^3*")"))

Cependant, quand je lance le code, cela donne l'erreur:

Error: Column indexes must be at most 1 if positive, not 22, 23, 24, 25, 21, 18, 19, 20, 16, 17, 12, 10, 11, 15, 13, 14, 3, 9, 8, 4, 7, 5, 6, 2, 124, 125, 121, 122, 123, 133, 132, 131, 134, 135, 126, 129, 127, 128, 130, 136, 137, 143, 144, 141, 142, 138, 139, 140, 57, 58, 55, 56, 42, 47, 41, 40, 36, 38, 37, 39, 46, 43, 44, 45, 34, 35, 26, 27, 28, 29, 30, 31, 32, 33, 59, 54, 53, 48, 49, 50, 51, 112, 116, 117, 114, 115, 88, 89, 52, 60, 63, 70, 75, 73, 74, 79, 77, 76, 78, 66, 67, 62, 65, 71, 64, 61, 72, 97, 87, 85, 86, 90, 98, 91, 83, 84, 92, 94, 96, 93, 95, 68, 69, 82, 80, 81, 113, 110, 111, 109, 118, 119, 120, 101, 105, 103, 104, 99, 106, 100, 102, 107, 108

Une idée pourquoi cette erreur se produit? Merci d'avance!

4
Çelik Termos
  1. Ce lien vous montre comment utiliser KNN d’une autre manière: https://www.youtube.com/watch?v=u8XvfhBdbMw

  2. De plus, je ne comprends pas pourquoi la knnImputation (data) ne fonctionne pas - bien que je me sois amusé avec le bloc de données et que cela fonctionne maintenant - même si je ne sais pas pourquoi cela fonctionne maintenant. 

Ce que j'ai fait était:

mydata <- read_Excel("icecreamdata.xlsx")    #Here I'm importing my data

newdata <- data.frame()   #I've created a blank data frame

newdata <- data.frame(mydata)   #I'm putting the data I want into this new data frame

anyNA(newdata) #Checking for missing data. TRUE = yes, data is missing. FALSE = no, data is not missing.

fixeddata <- knnImputation(newdata)  #Imputing data to a new object

anyNA(fixed data)

FALSE = Il n'y a plus aucune donnée manquante 

Les deux fonctionnent, mais j'aimerais aussi que les experts nous expliquent pourquoi nous avons l'erreur: les index de colonne doivent être au plus 1 si positif, etc. 

1
Kirsty N

L'explication principale de l'erreur signalée peut être trouvée ici.

Je suis entré dans le problème aujourd'hui et j'ai trouvé que nous devrions transformer notre objet tbl en objet data.frame !! C'est un point dégoûtant que différents packages ne soient pas compatibles. 

#check your df class,I think your df is actually as tbl object
class(df)
df_new <- as.data.frame(df)
0
Travis