如何使R中的“应用”功能更有效?

时间:2013-02-11 17:08:15

标签: performance r apply

我正在尝试将某些功能分组。下面的数据框(分组)是我的“关键”(想想Excel vlookup):

          Original  Grouped
1         Features Constant
2     PhoneService Constant
3    PhoneServices Constant
4       Surcharges Constant
5     CallingPlans Constant
6            Taxes Constant
7          LDUsage    Noise
8    RegionalUsage    Noise
9       LocalUsage    Noise
10       Late fees    Noise
11 SpecialServices    Noise
12         TFUsage    Noise
13       VoipUsage    Noise
14         CCUsage    Noise
15         Credits  Credits
16         OneTime  OneTime

然后我引用我的数据库,该数据库有一个列(BillSection),它从分组$ Original中获取特定值,我想根据分组的$ Grouped对其进行分组。我正在使用sapply函数来执行此操作。然后我将结果输出cbind到我原来的data.frame。

grouper<-as.character(sapply(as.character(bill.data$BillSection[1:100]), # for the first 100 records of the data.frame bill.data
       function(x)grouped[grouped$Original==x,2])) # take the second column, i.e. Grouped, for the corresponding "TRUE" value in Original
cbind(bill.data[1:100,],as.data.frame(grouper))

上面的代码按预期工作,但是当我将它应用于我的整个数据库时,它的速度很慢,超过10,000,000个唯一记录。有这种方法的替代方案吗?我知道我可以使用plyr,但它比我的速度更快(我认为)。我试图用data.table来解决这个问题,但没有运气。任何的意见都将会有帮助。我很乐意用Python编写这个,我是新手,但听说比R快得多,因为我经常处理大型数据集。我想知道R是否可以足够快地完成这项工作。

谢谢!

1 个答案:

答案 0 :(得分:2)

我不确定我理解你的问题,但你可以使用merge()吗?就像... ...

merge(big.df, group.names.df, by.x='orginal.column.in.big.df',
      by.y='original', all.x=T)

NB。 Plyr有一个并行选项...