/ / R: extraire des lignes et des colonnes spécifiques de dataframe - r

R: extraire des lignes et des colonnes spécifiques de dataframe - r

J'essaie de simplifier un script que j'utilise pour extraire des lignes et des colonnes spécifiques d'un grand bloc de données et les placer dans un autre afin de pouvoir ensuite tracer un graphique. Jusqu'à présent, j'ai utilisé un for boucle pour obtenir des bits à la fois, puis rbind() ensemble, mais je pense qu’il doit y avoir une meilleure solution. Espérons que je pourrai illustrer ce que j’ai essayé de faire à titre d’exemple représentatif:

a <- rep(1:8, each=40)
b <- rep(rep(1:4, each=5), times=16)
c <- runif(320)
d <- runif(320)

df <- data.frame(a,b,c,d)

Ce que je voudrais faire, c’est d’extraire ces colonnes de valeurs spécifiques de a et b. J'ai donc pensé, par exemple, à sortir des lignes où a est 1 ou 2, je pourrais le faire avec quelque chose comme:

extract.a = c(1,2)
extractcolumns = c("a", "b", "c", "d")
extracted <- df[a == extract.a, extractcolumns]

(Je suis parti dans le extractcolumns peu, même si je n’en ai pas besoin dans ce cas, mais dans le cas réel, je veux prendre 5 colonnes sur 17). Le problème est ce genre de travaux, mais prend seulement tous les deux Exemple,

extract.a = c(1,2,4)

Ensuite, il faut chaque troisième rangée. Je ne suis pas sûr de savoir exactement ce que ça fait ici, alors je suis bloqué sur la façon de le réparer. Ce que je voudrais faire en fin de compte, c’est de sélectionner des lignes où a est l'une de plusieurs valeurs et b est également l'une des deux valeurs. Quelque chose comme:

 extract.b = c(1,4)
extracted <- df[a == extract.a & b == extract.b, extractcolumns]

... mais évidemment ce n’est pas correct non plus. Cela fonctionne, par exemple:

 extracted <- df[(a == 1 | a == 2 | a == 4) & (b == 1 | b == 3), extractcolumns]

Mais j’aimerais pouvoir définir les valeurs de a et b, je voudrais un autre endroit, comme je l’ai fait plus haut.

J'espère que c'est assez clair!

Réponses:

1 pour la réponse № 1

La solution consiste à utiliser le %in% opérateur au lieu de == qui peut effectuer un plusieurs Comparaison

df[a %in% extract.a & b %in% extract.b, extractcolumns]