2016-04-07 6 views
0

Also habe ich einfach diese Funktion erstellt, die grundsätzlich zwei Strings (einen Text und eine Menge von Schlüsselwörtern) benötigt. Dann muss es herausfinden, wie viele Schlüsselwörter in der Textzeichenfolge enthalten sind, falls vorhanden. Ich habe versucht, den Code auf einen Datenrahmen ohne Erfolg anzuwenden.Konvertiere eine Funktion in einen apply, sapply (data.frame)

Funktion arbeitet:

something=function(text,keywords){ 
    kw = unlist(strsplit(keywords, ",")) 
    c=0 
    for(i in length(kw)){ 
    if(grepl(kw[i],text)==0){ 
     c=c+1 
    } else {c} 
    } 
    return(c) 
} 

Wo, wenn ich imput:

> something("this planetarium is the shit","planetarium,amazing") 
[1] 1 

Aber was, wenn mein Datenrahmen wurde df

 keyword   text_clean 
1 planetarium  Man this planetarium is the shit 
2 musee,africain  rt lyonmangels reste encore places franceangels tour lyon organisons investissons pme 

Mein Ausgang erwarten ist:

df.1 
1 1 
2 0 

Irgendwelche Einblicke? Ich habe versucht, diesen Code:

substng<-function(text, keywords){ 

    vector = laply(text,function(text,keywords){ 
    kw = unlist(strsplit(keywords, ",")) 
    c=0 
    for(i in length(kw)){ 
     if(grepl(kw[i],text)==0){ 
     c=c+1 
     } else {c} 
    } 
    return(c) 
    }) 
    vector.df= as.data.frame(vector) 
} 

df <- read.table(header = TRUE, stringsAsFactors = FALSE, text = "keyword   text_clean 
planetarium  'Man this planetarium is the shit' 
musee,africain  'rt lyonmangels reste encore places franceangels tour lyon organisons investissons pme'") 

df$count = substng(df$text_clean,df$keyword) 
+1

'mapply (etwas, df $ text_clean, df $ Schlüsselwort, USE.NAMES = FALSE)' sollte funktionieren. obwohl ich denke, dass du 'grepl (...) == 0''ing bist, wenn du' grepl (...) == 1''ing – rawr

+0

sein solltest, teste ich das, 'grepl (...) == 0 'wo 0 wahr ist .. aber dein mapply half mir meinen Code zu lösen. Ich habe meine Funktion ausgeführt! Vielen Dank! –

Antwort

0

Ich denke stri_count im Stringi-Paket kann dies erreichen.

Verwenden Sie "Muster | erstaunlich" als Muster/Regex. Rohr = "oder".

https://cran.r-project.org/web/packages/stringi/stringi.pdf

+0

Ok danke, es scheint, das würde nur meine 'for' -Schleife mit' grep' ersetzen, was gut ist, bedeutet das, dass es für das ganze 'df' geht? –

+0

Wenn ich deine Frage richtig verstehe, ja. Von Ihrer ursprünglichen Frage dachte ich, dass Sie eine ganzzahlige Vektorausgabe der Häufigkeit wünschen, mit der ein Schlüsselwort in jeder Zeichenfolge in dem Datenrahmen angezeigt wird. stri_count wird dir das geben. grepl gibt Ihnen einen logischen Vektor, der auf einem beliebigen Schlüsselwort in der Zeichenfolge basiert, unabhängig von der Anzahl der Male. – mjm