我一直試圖用mapply解決這個問題,但我相信我將不得不使用幾個嵌套應用來完成這項工作,並且它已經獲得真正令人困惑。檢查一個表中的關鍵字是否在另一個表中的字符串中使用R
問題如下:
數據幀一個包含大約400個關鍵字。這些大致分爲15類。 Dataframe two包含一個字符串描述字段和15個額外的列,每個列命名爲與數據框1中提及的類別相對應。這有數百萬行。
如果從數據幀1的關鍵詞在數據幀2串字段存在,其中關鍵字所在的類別,應在數據幀標記2
我想應該是這個樣子:
> #Dataframe1 df1
>> keyword category
>> cat A
>> dog A
>> pig A
>> crow B
>> pigeon B
>> hawk B
>> catfish C
>> carp C
>> ...
>>
> #Dataframe2 df2
>> description A B C ....
>> false cat 1 0 0 ....
>> smiling pig 1 0 0 ....
>> shady pigeon 0 1 0 ....
>> dogged dog 2 0 0 ....
>> sad catfish 0 0 1 ....
>> hawkward carp 0 1 1 ....
>> ....
我試圖使用mapply來使這個工作,但它失敗了,給我的錯誤「更長的參數不是一個更短的長度的倍數」。它也計算這隻適用於df2中的第一個字符串。我還沒有超越這個階段,即試圖獲得類別標誌。
> mapply(grepl, pattern = df1$keyword, x = df2$description)
任何人都可以幫忙嗎?我非常感謝你。我是R新手,所以如果有人可以提到一些用於將循環轉換爲應用函數的「拇指規則」,也會有所幫助。我不能使用循環來解決這個問題,因爲這會花費太多時間。
謝謝!此解決方案也適用,但我沒有在大型數據集上嘗試過。我很好奇記憶考慮如何工作。關於[ikop](http://stackoverflow.com/users/7760498/ikop)上面的答案,它在此期間創建了一個非常大的列表,那麼創建大型數據框的解決方案將會更多或更少的內存密集? – dmrzl
我已經編輯了我的答案,以便實現快速和高效的內存實現。 – Pieter
不幸的是,我得到錯誤''mc.cores'> 1在Windows上不受支持。有什麼解決方法嗎?你說得對,大數據集的應用函數太慢了。 – dmrzl