2017-07-31 40 views
1

我的數據幀(DF)是這樣的:如何計算我的評論中有多少條評論包含列表中的單詞?

Comments 
----------------- 
1 | comment1 
2 | comment2 
3 | comment3 
4 | comment4 

...

我已經建立2名名單如下:

list1<-c("money","finance","aid") 
list2<-c("major","degree")  

我想通過行搜索在具有來自不同人的評論的數據幀中。當任何的list1詞語的特定行被發現,counter1應該遞增,當list2字被發現counter2應該增加

我想要得到的結果爲:

counter1=10 ; counter2=25 

注:我不不希望在每個單詞頻率增加計數器。例如,如果評論同時包含「金錢」和「財務」,則計數器只應增加一次。但如果它有「金錢」和「主要」,counter1和counter2都應該增加。

回答

0

您可以用|將您的列表摺疊,因此如果找到匹配項,grepl將返回TRUE。例如:


樣本數據

comments = data.frame(text=c("only list 1 since money","only list 2 since major","both lists money major","money finance list 1 once")) 

         text 
1 only list 1 since money 
2 only list 2 since major 
3 both lists money major 
4 money finance list 1 once 

代碼

list1<-c("money","finance","aid") 
list2<-c("major","degree")  

counter1=sum(grepl(paste(list1,collapse="|"),comments$text)) 
counter2=sum(grepl(paste(list2,collapse="|"),comments$text)) 

結果

counter1: 3 
counter2: 2 

希望這有助於!

+0

它並沒有完全適用於我的數據框。注意到差異後,我發現該列只有1級的因子,但它有2351行。你能幫我解決嗎? –

+0

如果你的數據框是'df',並且你的列被稱爲'txt',則執行'df $ txt < - as.character(df $ txt)'。如果這不起作用,可能值得開一個關於這個問題的新問題,就像上面提到的一個可重複的例子(https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-可重現的例子),請提供樣品數據! – Florian

+0

謝謝弗洛裏安......它確實工作......我得到了我的完美解決方案...... –