2010-04-03 18 views
2

Je ne suis pas sûr de savoir comment procéder sans erreur. Voici un exemple simplifié de mon problème.R sélection du cadre de données par variable globale

Dire que je cette trame de données DF

a b c d 
1 2 3 4 
2 3 4 5 
3 4 5 6 

J'ai une variable

x <- min(c(1,2,3)) 

Maintenant, je veux ne faire ce qui suit

y <- DF[a == x] 

Mais lorsque je tente de se référer à une variable comme "x" j'obtiens une erreur parce que R cherche une colonne "x" dans ma trame de données. Je reçois l'erreur "colonnes non sélectionnées sélectionnées"

Comment puis-je faire ce que je suis en train de faire dans R?

Répondre

2

Je pense que c'est ce que vous cherchez:

> x <- min(DF$a) 
> DF[DF$a == x,] 
    a b c d 
1 1 2 3 4 

Un moyen plus facile (en évitant la variable 'x') serait ceci:

> DF[which.min(DF$a),] 
    a b c d 
1 1 2 3 4 

ou ceci:

> subset(DF, a==min(a)) 
    a b c d 
1 1 2 3 4 
+0

Le "x" était un exemple parce que je compare à d'autres données. La première partie que vous avez listée est la syntaxe que je ne connaissais pas mais dont j'avais besoin – Matt

4

Vous pouvez bénéficier de la lecture d'un Introduction à R, en particulier sur les matrices, les noms de données et l'indexation. Votre a est une colonne d'un data.frame, votre x est un scalaire. La comparaison que vous avez là ne fonctionne pas.

Peut-être que vous vouliez dire

R> DF$a == min(c(1,2,3)) 
[1] TRUE FALSE FALSE 
R> DF[,"a"] == min(c(1,2,3)) 
[1] TRUE FALSE FALSE 
R> 

qui vous indique que la première ligne unique, mais pas l'autre aussi. Envelopper cela dans which() vous donne des indices à la place.