2012-12-03 2 views
2

J'ai une trame de données 1488 obs. et 400 var. J'essaye d'enregistrer toutes les valeurs dans la table et puis en utilisant les valeurs aberrantes de paquet avec la commande rm.outlier, je suis en train d'essayer de supprimer les valeurs aberrantes. Le seul problème est que je reçois cette erreur:Erreur dans data.frame avec la fonction rm.outlier

Error in data.frame(V1 = c(-0.886056647693163, -0.677780705266081, -1.15490195998574, : arguments imply differing number of rows: 1487, 1480, 1481, 1475, 1479, 1478, 1483, 1485, 1484, 1477, 1482, 1469 

Voici mon code:

datalog <- matrix(0,nrow(data),ncol(data)) 
datalog[,] <- apply(data,2,log10) 
datalog[datalog==-Inf] <- 0 
datalog <- as.data.frame(datalog, stringsAsFactors=F) 

testNoOutliers <- rm.outlier(datalog, fill = FALSE, 
         median = FALSE, opposite = FALSE) 

Mes données: https://skydrive.live.com/redir?resid=CEC7696F3B5BFBC6!341&authkey=!APiwy6qasD3-yGo

Merci pour toute aide

+0

Welcom à SO! Quelle est votre fonction de testlog? – agstudy

+0

oh désolé désolé j'ai des noms différents dans mon truc. Renommez simplement testlog en datalog. – crysis405

+0

Quand je charge votre fichier, j'ai plus de 1488 obs, j'ai 7968 obs (lignes de chiffres)! Est-ce le bon fichier de données? – agstudy

Répondre

0

Vous avez cette erreur car un nombre différent de valeurs aberrantes est supprimé de chaque colonne et les colonnes ne peuvent donc pas être regroupées dans une même trame de données.

Si vous voulez remplacer les valeurs aberrantes avec NA, une solution serait

out.rem<-function(x) { 
    x[which(x==outlier(x))]=NA 
    x 
} 

apply(datalog,2,out.rem) 

Pour supprimer des lignes entières contenant des valeurs aberrantes, vous pouvez ajouter la ligne supplémentaire à la solution @agstudy

ll <- apply(datalog,2,function(x) which(x == outlier(x))) 
new.datalog <- datalog[-unique(unlist(ll)),] 
+0

Le rm.outliers supprime seulement 1 aberration de chaque colonne donc il devrait toujours être bien. À la fin, 400 valeurs devraient être supprimées. – crysis405

+0

Si vous lisez le message d'erreur qui dit "les arguments impliquent un nombre différent de lignes: 1487, 1480, 1481, ..." vous pouvez voir que le nombre de lignes dans chaque colonne est différent. Vous pouvez l'essayer en utilisant separement la fonction sur certaines colonnes. –

+0

Mais cela implique seulement cela. Désolé je suis nouveau à R. J'ai fait la fonction describe() du paquet Hmisc et chaque colonne avait encore 1488 lignes. Des suggestions sur la façon de modifier cette erreur? – crysis405

0

Vous avez l'erreur parce que vous n'avez pas le même nombre de variables de barre aberrantes.

Pour corriger vous avez 2 options:

  1. mettre l'option fill = TRUE: la moyenne est placée au lieu de valeurs aberrantes et non retiré

  2. Retirez le Oulier par vous-même:

    # get a list of outlier index for each variable 
        ll <- apply(datalog,2,function(x) which(x == outlier(x))) 
    
Questions connexes