2016-04-07 8 views
0

これで、基本的に2つの文字列(テキストとキーワードのセット)を取ります。次に、テキスト文字列に含まれるキーワードがいくつあるか調べなければなりません。私は成功していないデータフレームにコードを適用しようとしていました。関数をapply、sapply(data.frame)に変換します

機能が働いている:私は入力プログラム場合

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) 
} 

を:

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

しかし、何が私のデータフレームが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 

した場合に予想される私の出力は次のとおりです。

df.1 
1 1 
2 0 

洞察?私はこのコードをしようとしていた。

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(何かが、DFの$のtext_clean、DF $キーワード、USE.NAMES = FALSE)'動作するはずです。 grepl(...)== 1でなければならないときはgrepl(...)== 0 'と書いてあります。 – rawr

+0

私は 'grepl(...)== 0 '0はTrueですが、私のコードを解決するのに役立ちました。私は私の機能を実行している! ありがとうございました! –

答えて

0

私はstringiパッケージのstri_countはこれを実現することができると思います。

pattern/regexとして "pattern | amazing"を使用してください。パイプ= "または"。

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

+0

ありがとうございます。私の 'for'ループを' grep'と置き換えただけのようですが、これは良いことです、これは 'df'全体でそれを行うことを意味していますか? –

+0

あなたの質問が正しく理解できれば、はい。元の質問から、データフレームの各文字列にキーワードが表示される回数の整数ベクトル出力が必要だと思った。 stri_countはこれをあなたに与えます。 greplは回数に関係なく文字列に現れるキーワードに基づいて論理的なベクトルを与えます。 – mjm

関連する問題