Sous-ensemble basé sur la variable nom de la colonne
Je me demandais comment faire pour utiliser la subset
fonction de si je ne connais pas le nom de la colonne que je veux tester. Le scénario est le suivant: j'ai une Brillante application où l'utilisateur peut sélectionner une variable de filtre (sous-ensemble) de la table de données. - Je recevoir le nom de la colonne à partir de la webapp comme entrée, et je veux sous-ensemble fondé sur la valeur de cette colonne, comme suit:
subset(myData, THECOLUMN == someValue)
Sauf si les deux THECOLUMN
et someValue
sont variables. Est-il une syntaxe pour le passage de la colonne désirée nom comme une chaîne de caractères?
Semble vouloir un mot nu, qui est le nom de la colonne, pas une variable qui contient le nom de la colonne.
Vous devez vous connecter pour publier un commentaire.
C'est précisément pourquoi
subset
est un mauvais outil pour autre chose que de l'utilisation interactive:Fondamentalement, l'extraction de choses dans R est construit autour de
[
. L'utiliser.data.table
s fonctionnent différemment et (à mon humble avis) incroyable obtus (à mon immense et répétée de la frustration). Isetkey(d,"x"); d["c"]
. Mais j'ai toujours trouvé données.syntaxe de tableau si opaque que je finissent généralement dominant "simple" des méthodes.Les deux
subset
etwith
sont conçus pour une utilisation interactive et les mises en garde contre leur utilisation dans d'autres fonctions se trouvent dans leurs pages d'aide. Cela provient de leur stratégie d'évaluation des arguments des expressions au sein d'un environnement construit à partir du nom de leurs données à des arguments. Ces colonne/les noms d'élément sinon ne seraient pas des "objets" dans le R de bon sens.Si
THECOLUMN
est le nom d'un objet dont la valeur est le nom de la colonne etsomeValue
est le nom d'un objet dont la valeur est la cible, alors vous devriez utiliser:Le fait que "[[" évaluera son argument est pourquoi il est supérieur à "$" pour la programmation. Si nous utilisons joran exemple:
Donc, dans ce cas, tous ces retour le même atomique vecteur:
Je pense que vous pouvez utiliser le one-liner suivant:
où
retourne un vecteur contenant tous les noms de colonne et
devrait résultats dans un numérique, vecteur de longueur 1 (donné le nom de la colonne est unique) pointant vers votre colonne. Voir
?grep
pour plus d'informations sur la correspondance de motif dans R.