2010-12-02 24 views
1

J'ai réécrit mon problème maintenant pour le rendre plus clairColler des conditions logiques dans R

Je veux remplacer une condition comme celui-ci où var est une variable dans dataframe (dataframe $ var) avec une pâte ou une autre solution que je J'ai tellement de valeurs de condition (?) (a, b et c dans mon exemple).

subdataframe<-dataframe[var=="a"|var=="b"|var=="c",] 

J'ai essayé de faire une liste (?) Des valeurs de la condtion.

sample<-c("a","b","c") 

et d'utiliser ensuite la pâte pour rendre la condition logique

subdataframe<-dataframe[paste("var",sample,sep="==",collapse="|"),] 

Mais cela ne fonctionne pas

Aide = s'il vous plaît)

Marcus

+0

Que contient 'var'? – nico

+3

Ce que vous décrivez porte le nom 'eval' dans les langues qui le supportent (et non si R l'a) - et là-bas, ils ont un dicton: Si' eval' est la réponse, vous posez la mauvaise question. – delnan

+0

@delnan c'est en fait 'parse', pas' eval' (voir ma réponse pour la citation). +1 pour être si proche! ;-) –

Répondre

7

Heed fortune (106):

> fortune(106) 

If the answer is parse() you should usually rethink the question. 
    -- Thomas Lumley 
     R-help (February 2005) 

Je vous encourage à repenser ce que vous essayez de faire ...

Je suppose que vous pouvez utiliser match ou %in% pour atteindre le résultat souhaité, mais vous ne nous avez pas dit ce que vous Essayons de faire.

> sample <- c("a","b","c") 
> var <- c("a","d","c") 
> eval(parse(text=paste("var==",sample,"",sep="'",collapse="|"))) 
[1] TRUE FALSE TRUE 
> var %in% sample 
[1] TRUE FALSE TRUE 
+2

On dirait qu'il est un sous-ensemble, donc il écrirait simplement 'object [var% in% sample,]' pour obtenir, par exemple, les lignes d'une trame de données où var correspond à un élément de la liste. –

+0

Oui. C'est ce que j'essaie de faire. Dans mon cas, j'essaie d'extraire des données à partir d'un ensemble de données d'un panel, je vends juste certaines années et certaines entités (pays dans mon cas). Et je veux extraire les entités que j'ai dans un vecteur, dans ce cas échantillon. –

+0

objet [var% dans% échantillon,] travaillé parfait! –

1

Joshua a raison de s'interroger sur l'utilisation de l'analyse.

encore, voici la réponse à votre question:

paste("var==\"",sample, "\"",sep="",collapse="|") 

Vous obtiendrez la chaîne désirée, inculding guillemets.

+0

Avant la mise à jour de sa question. Voir la révision 1 de la question. – Martin

+0

J'ai supprimé mon commentaire. Vous avez raison, dans la 1ère révision, la question principale est de savoir comment coller avec des guillemets (mais traiter comme condition est là aussi);)). Juste pour ajouter à votre réponse: au lieu d'utiliser '" \ "" 'vous pouvez utiliser' shQuotes': 'paste (" var == ", shQuote (exemple), sep =" ", collapse =" | ")'. – Marek