2012-12-15 4 views
0

J'ai essayé ceci mais cela nécessitera à nouveau un for -loop pour comparer ainsi n'importe quelle meilleure méthode pour trouver l'index.Extrait l'index d'une chaîne de correspondance exacte

str[[1]][1] 
"NYA.FWD.AMGM.MON..MAXRUNALARM." 
m<-grep(str[[1]][1] , colnames(log_data)[2:ncol(log_data)] , value=FALSE) 
m 
[1] 5 6 

colnames(log_data)[6] 
"NYA.FWD.AMGM.MON..MAXRUNALARM....SU." 
colnames(log_data)[7] 
"NYA.FWD.AMGM.MON..MAXRUNALARM." 

Je veux seulement le sous forme d'indices, signifie que la longueur exacte de la chaîne ou est-il une meilleure méthode pour extraire la chaîne similaire de même longueur.

J'ai aussi utilisé

str_detect((colnames(log_data)[2:ncol(log_data)]),fixed(str[[1]][1])) 
[1] FALSE FALSE FALSE FALSE **TRUE TRUE** FALSE FALSE FALSE FALSE FALSE FALSE 
[13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 

mais obtenir les vecteurs logiques veulent juste un index unique , je vous remercie.

+0

grâce Jibler pour le modifier si bien. – Aashu

Répondre

2

Si vous voulez une correspondance exacte, utilisez match:

match(str[[1]][1], colnames(log_data)[2:ncol(log_data)]) 

Il retourne l'index du premier match. Si vous avez plusieurs correspondances et que vous voulez tous les indices, faire:

which(str[[1]][1] == colnames(log_data)[2:ncol(log_data)]) 
+0

merci beaucoup monsieur pour votre aide. – Aashu

0

est ici une méthode d'expression régulière qui utilise une longueur de chaîne (nchar et/ou nzchar) pour retourner l'index pour tous les correspondances exactes. Pour la première correspondance uniquement, ajoutez simplement [1] à la fin de l'appel which(...) ci-dessous (c'est-à-dire which(...)[1]).

Supposons que c.names serait le résultat de colnames(log_data).

> s <- "NYA.FWD.AMGM.MON..MAXRUNALARM." 
> c.names <- c("NYA.FWD.AMGM.MON..MAXRUNALARM....SU.", 
       "NYA.FWD.AMGM.MON..MAXRUNALARM.", 
       "NYA.FWD.AMGM.MON..MAXRUNALARM..D.", 
       "..NYA.FWD.AMGM.MON..MAXRUNALARM.", 
       "NYA.FWD.AMGM.MON..MAXRUNALARM.") 

Premier match seulement:

> which(!nzchar(gsub(s, '', c.names)))[1] 
## [1] 2 

Tous les matches:

> which(!nzchar(gsub(s, '', c.names))) 
## [1] 2 5 
Questions connexes