我正在尝试将某些功能分组。下面的数据框(分组)是我的“关键”(想想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是否可以足够快地完成这项工作。
谢谢!
答案 0 :(得分:2)
我不确定我理解你的问题,但你可以使用merge()
吗?就像... ...
merge(big.df, group.names.df, by.x='orginal.column.in.big.df',
by.y='original', all.x=T)
NB。 Plyr有一个并行选项...