Supprimer des lignes avec des valeurs négatives
Dans R, je suis en train de supprimer des lignes dans un dataframe (fourmis) qui ont une valeur négative dans la colonne de Turbidité. J'ai essayé
ants<-ants[ants$Turbidity<0,]
mais il renvoie l'erreur suivante:
Warning message:
In Ops.factor(ants$Turbidity, 0) : < not meaningful for factors
Des idées pourquoi cela peut être? Peut-être que j'ai besoin de faire les valeurs négatives
NA avant que je puis supprimez tous les NAs?
Toutes les idées beaucoup apprécié, merci!!!!
@Joris: le résultat est
str(ants$Turbidity)
num [1:291] 0 0 -0.1 -0.2 -0.2 -0.5 0.1 -0.4 0 -0.2 ...
Je pense que vous vouliez dire
Oui, vous avez tout à fait raison, mon erreur, l'un des nombreux je pense!
Je suis a l'origine des fourmis$Turbidité, pas convertis. L'un de vous donner ici ne peuvent pas donner à l'erreur. Mais comme vous l'avez indiqué vous-même, à l'aide de
>
lors de l'écriture de <
.Oui, vous avez tout à fait raison, mon erreur, l'un des nombreux je pense!
Je suis a l'origine des fourmis$Turbidité, pas convertis. L'un de vous donner ici ne peuvent pas donner à l'erreur. Mais comme vous l'avez indiqué vous-même, à l'aide de
header=T
semble résoudre, ce n'est pas la peine.OriginalL'auteur Joey | 2010-11-18
Vous devez vous connecter pour publier un commentaire.
Marek est droit, c'est un problème de données. Maintenant, soyez prudent si vous utilisez [comme.numérique(les fourmis$Turbidité] , que l'on sera toujours positif. Il donne le facteur niveaux (de 1 à longueur(fourmis$Turbidité)), et non pas les facteurs numériques.
Essayez ceci :
Il vous donnera une liste d'indices où la valeur n'était pas numérique dans la première place. Cela devrait vous permettre de nettoyer vos données.
par exemple:
Vous ne devriez pas utiliser la
as.numeric(as.character(...))
structure de convertir les données problématiques, comme il va générer NA que plaisante pas avec le reste. Par exemple:Vous voulez donc dire qu'après laquelle(!est.na(tt)), vous obtenez une liste de 1 au nombre de lignes? Si oui, pouvez-vous mettre à la sortie de
str(ants$Turbidity)
dans votre question?str(fourmis$Turbidité) num [1:291] 0 0 -0.1 -0.2 -0.2 -0.5 0.1 -0.4 0 -0.2 ...
hein? C'est un vecteur numérique. Vous ne pouvez pas obtenir une erreur à partir de ce que vous avez décrit. Mais vous l'avez indiqué vous-même que le problème était les en-têtes de colonne, de sorte que l'aide de l'option
header=T
résolu le problème, alors, je suppose.OriginalL'auteur Joris Meys
Toujours faire
summary(ants)
après la lecture des données, et de vérifier si vous obtenez ce que vous attendez.Il vous fera économiser beaucoup de problèmes. Les données numériques sont sujettes à la magie de la conversion de caractère ou facteur de types.
il n'y a rien de magique à la conversion. Si il est converti en caractère ou facteur de types, il y a un problème dans les données en premier lieu.
la conversion est dû au fait qu'il y a des caractères non numériques dans votre jeu de données. Si il serait possible, des R ont fait d'eux numérique. Vous devez supprimer les caractères non numériques.
Comment vous les lire? Peut-être vous choisissez une mauvaise version de
read.csv
? Voir l'aide pourread.table
et la description decolClasses
argument.J'ai l'habitude d'utiliser
str
causer de grands ensembles de donnéessummary
peut-être exagéré.OriginalL'auteur Spacedman
MODIFIER. J'ai oublier
as.character
de conversion (voir Joris commentaire).Message signifie que
ants$Turbidit
est unfactor
. Il fonctionne lorsque vous neou
Mais le vrai problème est que vos données ne sont pas préparés à l'analyse. Cette conversion devrait être effectuée au début. Vous devez être prudent, il pourrait être non-valeurs numériques également.
as.numeric
donnera facteur de niveaux, pas de la valeur numérique. Si vous utilisezas.numeric(as.character(ants$Turbidity))
, vous aurez des problèmes avec NA.Merci, cela fonctionne bien, j'ai réalisé que je veux réellement envie de garder tout supérieure ou égale à 0.0. Quand vous dites que ce type de conversion doit être faite au début...au début de quoi? Désolé, je suis assez nouveau dans R et non utilisée pour certains de la meilleure pratique...merci 🙂
Chose évidente, mais je l'ai raté. Thx.
OriginalL'auteur Marek
Cela devrait aussi fonctionner à l'aide de la tidyverse (en supposant que la colonne est le type de données correct).
OriginalL'auteur Ryan