2010-10-19 9 views
2

J'ai un fichier CSV avec un tas de données comme ceci:R: obtenir des lignes de qualification à partir de données?

> test.csv <- read.csv("~/Desktop/stats.csv") 
> test.csv 
      m     lvl a  b   c a_pct b_pct c_pct d_pct 
1 543557     2A 13 255 59.6666667 18.8 10.2 1.6  5.1 
2 545059     2A 0 19 4.0000000 15.8 15.8 5.3 10.5 

Je veux être en mesure de faire un histogramme comme a_pct en utilisant hist(test.csv$a_pct) mais seulement sur les lignes de qualification, où comme c_pct> 20 ou c < 200 , etc. Un peu comme une clause SQL WHERE. Existe-t-il un moyen de le faire facilement en R?

Répondre

2

Essayez ceci:

hist(test.csv[test.csv$c_pct > 20 | test.csv$c < 200, "a_pct"]) 

Deux notes:

  1. A data.frame est indexé par [lignes, colonnes], où vous pouvez spécifier quoi que ce soit pour sélectionner les lignes/colonnes spécifiques. Vous devez utiliser | au lieu de ||, puisque le premier est vectorisé.
+0

Je suis en difficulté en utilisant une chaîne?. Quelque chose comme: '[test.csv $ lvl = '2A', 'a_pct']' mais cela échoue. Des idées? – Wells

+2

Ce n'est pas la chaîne. '=' est utilisé pour l'affectation, '==' est pour la comparaison logique. Lisez le 'help (" <")' pour plus d'informations. –

+0

Est-ce plus rapide que le sous-ensemble()? –

2

Une façon simple est juste:

with(test.csv, hist(a_pct[ c_pct > 20 ])) 
+0

Vous avez besoin du 'c <200', sinon vous obtenez une erreur. –

1

Avez-vous regardé sous-ensemble

hist(subset(test.csv, c_pct > 20 | c < 200, select=a_pct)) 
Questions connexes