R通过聚合变量从长到宽重塑数据

时间:2016-08-25 16:29:41

标签: r reshape2 melt

我有以下长格式的行式交易数据

<provider>org.hibernate.ejb.HibernatePersistence</provider>

我想重塑这个以将一个事务中的所有项目放在一行中,因此新的重新整形表看起来像这样(宽)

TransactionId ItemCode
101   123
101   521
102   423
103   871
103   982
103   131

我在R中尝试过熔化和铸造,但我对这些方法的工作方式感到有些困惑。我的数据集也很庞大,有30M行。我应该怎么做这个过程?

1 个答案:

答案 0 :(得分:1)

您可以使用plyr包来完成您想要的任务。假设您的数据位于数据框products_sample中,则可以使用ddply包中的spread tidyr。这会将每个ItemCodes的不同TransactionId放入不同的列中。

library(plyr)
librray(tidyr)
result <- ddply(products_sample, "TransactionId", spread, ItemCode, ItemCode)

使用您提供的数据:

  TransactionId ItemCode
1           101      123
2           101      521
3           102      423
4           103      871
5           103      982
6           103      123

这给出了

print(result)
##  TransactionId 123 521 423 131 871 982
##1           101 123 521  NA  NA  NA  NA
##2           102  NA  NA 423  NA  NA  NA
##3           103  NA  NA  NA 131 871 982

ddply的最后两个参数是传递给key的{​​{1}}和value个参数。 spread标识key中的列,其值将用作列名。 products_sample标识value中其值将填充单元格的列。有关详细信息,请参阅products_sample