Je suis bloqué dans cette tâche simple de sous-place des rangées d'un fichier de données basé sur un vecteur de caractère: où j'aimerais obtenir un fichier de données contenant uniquement les lignes définies par un Correspondance entre Cependant, Grep renvoie les indices corrects. par exemple. mais malheureusement, cela renvoie un vecteur df $ spécimen.label code> et
VEC code>. Utilisation du simple
df2 <- df [df $ spécimen.Label% in% VEC,] code> renvoie un fichier de données de 0 lignes, tout en appelant pour les index de ligne avec
Vec2 <- qui (DF $ SPÉCIMEN.LABEL% IN% VEC) CODE> Retourne un vecteur vide d'entier de classe. P>
Grep ("E1CD3D70.132B.452F.BA10.026721_D2", DF $ SPÉCIMEN.LABEL) CODE> Retours
10 code>. Je pensais donc pourquoi ne pas le reproduire comme ceci: p>
ind code> (de longueur égale à
VEC Code>) Rempli avec
NA code> S au lieu des index de la rangée souhaité, ainsi qu'un avertissement indiquant que "Nombre d'éléments à remplacer n'est pas un multiple de longueur de remplacement". Qu'est-ce qui ne va pas ici? Pourquoi Grep fonctionne-t-il lorsqu'il est appelé individuellement mais ne renvoie pas à des valeurs lorsqu'il est utilisé à l'intérieur d'une boucle? Merci d'avance pour les solutions fructueuses. P> p>
3 Réponses :
On dirait que votre problème est que VEC code> contient des points au lieu de tirets. Ce code peut s'attaquer à ce que:
#Replace
vec <- gsub('.','-',vec,fixed = T)
#Compare
df2 <- df[df$Specimen.Label %in% vec,]
PCC Participant.ID Specimen.Label
3 PNNL 01CO008 8cc7e656-0152-4359-8566-0581c3
6 PNNL 05CO002 f635496c-0046-4ecd-89bc-7a4f33_D2
8 PNNL 11CO051 b3696374-c6c0-49dd-833e-596e26_D2
10 PNNL 11CO053 e1cd3d70-132b-452f-ba10-026721_D2
Le match de chaîne échoue car les données dans si vous remplacez le ... et la sortie: p> VEC code> sont délimitées par des périodes, mais les données dans
df code> sont délimitées par des tirets.
BASE R SOLUTION H2 >
. code> avec
- code>, vous pouvez utiliser le formulaire
[ code> de l'opérateur d'extrait avec
% dans % code>: p>
solution dplyr h2> < p> Une solution avec
dplyr :: filtre () code> est la suivante: p>
(il suffit d'ajouter mon commentaire comme une réponse puisqu'il a été affiché avant les autres) em> Le problème est que dans vous obtenez p> une autre option de base r est d'utiliser la fonction VEC code> Vous avez des points, tandis que dans df $ speximen.label code> Vous avez des traits d'union, de sorte que vos premières commandes ne renvoient rien. Si vous écrivez à la place p>
Sous-ensemble CODE> P>
subset(df, Specimen.Label %in% gsub("\\.", "-", vec))
grep code> suppose
. code> pour être quelque chose que
correspondant code> distinguer entre
_ code> et
. code>.
Le problème est que dans
VEC code> vous avez des points, alors que dans
df $ spécimen.label code> Vous avez des traits d'union, de sorte que vos premières commandes ne renvoient rien.
df [df $ spécimen.label% in% gsub ("\\.", "-", VEC),] code> retourne quelques lignes de l'original Dataframe (avec vos données d'échantillons, il renvoie des lignes 3, 6, 8, 10). Est-ce votre sortie souhaitée?