0

特定の機能をグループにまとめようとしています。以下のdata.frame(グループ化)は私の「キー」です(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

次に、grouped $ Originalから特定の値をとる列(BillSection)を持つデータベースを参照し、grouped$Groupedに従ってグループ化します。この操作を実行するためにsapply関数を使用しています。次に、結果の出力を元の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を使用できることは知っていますが、sapplyよりもさらに低速です(私は思います)。data.tableでそれを理解しようとしていましたが、運がありませんでした。どんな提案も役に立ちます。私はこれをPythonでコーディングすることにオープンですが、これは私が初めて使用するものですが、大規模なデータセットを頻繁に処理しているため、Rよりもはるかに高速です。私は、Rがこれを十分に速く実行できるかどうかを知りたかったのです。

ありがとう!

4

1 に答える 1

2

あなたの質問がわかりませんが、使用できますmerge()か?つまり...のようなもの

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

NB。Plyrには並列オプションがあります...

于 2013-02-11T17:15:31.083 に答える