将函数转换为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帮我解决了我的代码。我的函数正在运行!非常感谢。