La suppression de la constante de colonnes dans la R
J'ai été en utilisant le prcomp fonction lorsque j'ai reçu cette erreur
Error in prcomp.default(x, ...) :
cannot rescale a constant/zero column to unit variance
Je sais que je peux analyser mes données manuellement mais est-il une fonction ou une commande dans R qui peut m'aider à enlever ces variables constantes?
Je sais que c'est une tâche très simple, mais je n'ai jamais été à travers toute fonction qui fait cela.
Merci,
- Veuillez lire les consignes de publication, et de fournir un petit, reproductible de l'échantillon
x
. Droit maintenant, nous ne savons même pas si votrex
est numérique, et encore moins une matrice. Maintenant, si c'est une matrice,y <- x[,sd(x)!=0]
suffira. - Probablement pas nécessaire si vous utilisez prcomp sur vos données, mais si vous avez mélangé les types de colonnes, une solution simple est
x[,apply(x, 2, function(col) { length(unique(col)) > 1 })]
Vous devez vous connecter pour publier un commentaire.
Le problème ici est que votre colonne de la variance est égale à zéro. Vous pouvez vérifier la colonne d'une trame de données est la constante de cette façon, par exemple :
Donc, si vous voulez exclure ces colonnes, vous pouvez utiliser :
EDIT : En fait, c'est plus simple à utiliser
apply
à la place. Quelque chose comme ceci :sd
🙂sd(x)
est d'utiliserapply(x, 2, sd)
, je pense que c'est tout à fait le même, si vous suivez les conseils 🙂Je suppose que ce Q&A est un populaire résultat de recherche de Google, mais la réponse est un peu lent pour une matrice de grande taille, plus je n'ai pas assez de réputation pour commenter la première réponse. Donc je poste une nouvelle réponse à la question.
Pour chaque colonne d'une matrice de grande taille, de vérifier si le maximum est égal à la valeur minimale est suffisante.
C'est le test. Plus de 90% du temps est réduite par rapport à la première réponse. Il est également plus rapide que la réponse de la deuxième commentaire sur la question.
Depuis ce Q&A est un populaire résultat de recherche de Google, mais la réponse est un peu lent pour une matrice de grande taille et @raymkchow version est lent avec NAs je propose une nouvelle version à l'aide de l'exponentielle de recherche et
data.table
pouvoir.Cette fonction j'ai mis en place dans dataPreparation paquet.
D'abord construire un exemple de données.table, avec plus de lignes que de colonnes (ce qui est généralement le cas) et 10% de NAs
Ensuite de référence à toutes les approches:
Les résultats sont les suivants:
dataPreparation:whichAreConstant
est 10 fois plus rapide que les autres approches.Plus plus le nombre de lignes que vous avez le plus intéressant à utiliser.