2010-05-20 5 views
1

Je dois créer une nouvelle trame de données qui exclut les barrages apparaissant dans les colonnes "dam1" et "dam2" sur le même date (date de placement). J'ai essayé df <- df[df$dam1!=df$dam2,] mais n'a pas fonctionné. Dam1 et dam2 sont des facteurs qui sont les id des mères.sélectionner des lignes avec des valeurs de colonne non identiques en utilisant R

mon df:

fosdate  dam1  dam2 
8/09/2009 2Z523 2Z523 
30/10/2009 1W509 5C080 
30/10/2009 1W509 5C640 
30/10/2009 1W509 1W509 
1/10/2009 1W311 63927 

La nouvelle trame de données que je dois faire est: dfnew:

fosdate  dam1  dam2 
30/10/2009 1W509 5C080 
30/10/2009 1W509 5C640 
1/10/2009 1W311 63927 

apprécierait toute aide!

Bazon

+0

Hey Bazon, ce qui est avec les deux différents comptes avec le même nom d'utilisateur posant effectivement des questions en double? http://stackoverflow.com/questions/2863316/selecting-rows-with-unidentical-values-appearing-in-two-different-columns-in-r – whybird

+0

Vous pouvez préciser à quelle langue/cadre cette question est destinée, en l'état, la question est assez ambiguë. – David

Répondre

3

Le problème est que dam1 et dam2 sont des facteurs ayant chacun un nombre différent de niveaux. Pour contourner cela, vous devez convertir les facteurs en "caractères" pour faire cette comparaison.

dfnew <-df[as.character(df$dam1) != as.character(df$dam2), ] 
+1

Ceci est la bonne réponse. – neilfws

+0

Brian, merci beaucoup! ça a fait l'affaire. Je comprends mieux avec l'explication que vous fournissez! – Bazon

+0

Comme les états dans l'aide aux comparaisons factorielles fonctionnent pour le facteur et le caractère, donc 'df [en tant que caractère (df $ dam1)! = Df $ dam2,]' fonctionne aussi bien. Vous pouvez utiliser 'subset':' sous-ensemble (df, as.character (dam1)! = Dam2) '. – Marek

-1

conjecture sauvage basée sur l'idée que vous pourriez utiliser R (puisque vos autres questions portent sur R). Notez que je ne connais pas R, je suis en train de mettre 2 et 2 ensemble des autres questions et réponses données.

Essayez

df <- df[df$dam1 != df$dam2,] 

à savoir spécifions df $ explicitement des deux côtés de la clause de comparaison.

+0

Je viens d'éditer la question ci-dessus. la syntaxe utilisée était df <-df [df $ dam1! = df $ dam2,]. le message que j'ai reçu était: Erreur dans Ops.factor (fosdetail2 $ sow, fosdetail2 $ recipsow): les ensembles de niveaux sont différents. Je suis nouveau à R et essayant de me frayer un chemin à travers! – Bazon

+0

pourquoi les deux comptes? Je suis venu à connaître ce site utile dernière faible et donc j'ai rejoint. Je me suis déconnecté et je ne pouvais pas me connecter à nouveau à mon compte et je voulais vraiment faire passer cette question - donc créé un autre compte. – Bazon

+0

Avez-vous essayé le sous-ensemble de façon de le faire comme mentionné dans http://stackoverflow.com/questions/2854625/select-only-rows-if-its-value-in-a-particular-column-is-less-than -sa valeur-dans-th/2854856 # 2854856? – whybird

0

Je pense que lorsque vous avez importé les données, df $ Dam1 et df dam2 $ est devenu facteurs

Vous pouvez vérifier cela avec

is.factor(df$dam1) 

Si cela est vrai, alors essayez quelque chose comme

df[as.character(df$dam1) != as.character(df$dam2),] 
+0

Correct, sauf! = Au lieu de ==. – neilfws

+0

sameer, grâce à vous aussi!thats right - "! =" au lieu de "==" – Bazon

+0

Ah, merci de souligner la faute de frappe – Sameer

Questions connexes