我有以下长格式的行式交易数据
<provider>org.hibernate.ejb.HibernatePersistence</provider>
我想重塑这个以将一个事务中的所有项目放在一行中,因此新的重新整形表看起来像这样(宽)
TransactionId ItemCode
101 123
101 521
102 423
103 871
103 982
103 131
我在R中尝试过熔化和铸造,但我对这些方法的工作方式感到有些困惑。我的数据集也很庞大,有30M行。我应该怎么做这个过程?
答案 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
。