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

将函数转换为apply,sapply(data.frame),r,dataframe,sapply,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

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

功能正在运行:

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)

substang我认为stri_count在stringi包中可以实现这一点

使用“pattern | amazing”作为pattern/regex。Pipe=“或”


好的,谢谢你,似乎这只会将我的
for
循环替换为
grep
,这很好,这是否意味着它将对整个
df
进行替换?如果我正确理解你的问题,是的。根据您最初的问题,我认为您需要一个整数向量输出,即关键字在数据帧的每个字符串中出现的次数。stri_count会给你这个的。grepl将根据字符串中出现的任何关键字给出一个逻辑向量,不管出现的次数是多少。
mapply(something,df$text\u clean,df$keyword,USE.NAMES=FALSE)
应该可以工作。虽然我认为你是
grepl(…)==0
,而你应该是
grepl(…)==1
,但我测试过,
grepl(…)==0
,其中0是真的。。但是你的mapply帮我解决了我的代码。我的函数正在运行!非常感谢。