我一直试图用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