2016-04-12 9 views
0

Ich habe Liste der Datenmenge:Ersetzen Werttabelle mit der Bedingung in R

> data1 
[1] /index.php/search? 
[2] /tabel/graphic1_.php? 
[3] /mod/Layout/variableView2.php? 
[4] /table/tblmon-frameee.php? 

und einen Tisch:

> tes 
[1] http://aladdine/index.php/search?   
[2] http://aladdine/mod/params/returnParams.php 
[3] http://aladdine/mod/Layout/variableView2.php 
[4] http://aladdine/index.php/bos/index?   
[5] http://aladdine/index.php/Bos 

Ich möchte mit einem Index auf Dataset den Wert der Testtabelle ändern, die enthält übereinstimmende Zeichenfolgenwerte im Dataset. Ich habe diesen Code versucht:

for(i in 1:length(dataset)){ 
    p = data[i] 
    for(j in 1:length(tes)){ 
    t = tes [j] 
    if(grepl(p, t)){ 
     tes[j]=i 
    } 
    else tes[j] = "-" 
    } 
} 

Meine Erwartung Ergebnis so,

> tes 
    [1] 1   
    [2] - 
    [3] 3 
    [4] -   
    [5] - 

Aber ich bekomme immer Warnmeldung invalid factor level, NA generated. Warum?

Vielen Dank.

+2

Konvertieren Sie alles zu Charakter. –

Antwort

0

Der folgende Code tut nicht genau das, was Sie brauchen, aber effektiv sollte es Ihnen die gleichen Informationen geben.

data1<-c('/index.php/search?', 
     '/tabel/graphic1_.php?', 
     '/mod/Layout/variableView2.php?', 
     '/table/tblmon-frameee.php?') 

tes<-c('http://aladdine/index.php/search?',   
     'http://aladdine/mod/params/returnParams.php', 
     'http://aladdine/mod/Layout/variableView2.php', 
     'http://aladdine/index.php/bos/index?',   
     'http://aladdine/index.php/Bos') 

> lapply(data1,FUN = function(x) which(grepl(x,tes))) 

[[1]] 
[1] 1 

[[2]] 
integer(0) 

[[3]] 
[1] 3 

[[4]] 
integer(0) 

Zum Beispiel ist die erste Ausgabe in [[1]] sagt, welches Element in "tes" in "data1" das erste Element übereinstimmen etc ...

0

Wahrscheinlich nicht der schnellste als ich benutze for-Schleife in diesem Code, aber hoffe, das bietet eine Lösung:

require(data.table) 

data1<-c("/index.php/search?","/tabel/graphic1_.php?","/mod/Layout/variableView2.php?","/table/tblmon-frameee.php?") 


tes<-c("http://aladdine/index.php/search?","http://aladdine/mod/params/returnParams.php" ,"http://aladdine/mod/Layout/variableView2.php","http://aladdine/index.php/bos/index?","http://aladdine/index.php/Bos") 
d<-data.table(d=data1,t=tes) 
d$id<-seq(1:nrow(d)) 
for (i in 1:nrow(d)) 
{ 
d$index[i]<-lapply(data1,FUN=function(x) {ifelse(length(grep(x,tes[i]))>0,d$id[i],"-")})[i] 
}