将函数转换为apply,sapply(data.frame)

时间:2016-04-07 19:21:54

标签: r dataframe sapply

所以我刚刚构建了这个函数,它基本上需要两个字符串(一个文本和一组关键字)。然后,它必须找到文本字符串包含的关键字数量(如果有)。我一直试图在数据框架上应用代码但没有成功。

功能正常:

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 个答案:

答案 0 :(得分:0)

我认为stringi包中的stri_count可以实现这一点。

使用“pattern | amazing”作为模式/正则表达式。 Pipe =“或”。

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