2013-03-14 81 views
3

我需要以不同的方式查看数据帧中的数据。这里的问题..R中的数据转换

我有一个数据帧如下

Person Item BuyOrSell 
1  a B 
1  b S 
1  a S 
2  d B 
3  a S 
3  e S 

我需要它转化成这个样子。显示个人在个别项目上进行的所有交易的总和。

Person a b d e 
1  2 1 0 0 
2  0 0 1 0 
3  1 0 0 1 

我能够通过中的R

了新的要求我是看到的数据如下使用

table(Person,Item)实现上述。显示该人对交易类型(B或S)

Person aB aS bB bS dB dS eB eS 
1   1 1 0 1 0 0 0  0 
2   0 0 0 0 1 0 0  0 
3   1 0 0 0 0 0 0  1 

所以我创建了一个新的列和追加两个项目和BuyOrSell值破个别项目进行的所有交易的总和。

df$newcol<-paste(Item,"-",BuyOrSell,sep="") 
table(Person,newcol) 

并且能够达到上述结果。

R有做更好的方式来做这种类型的转换吗?

+0

'paste'方法很好。你可以通过'as.data.frame(表格(Person,Item,BuyOrSell))'获得相同的信息(尽管格式不同),但我不知道这种方法更好。 – Ista 2013-03-14 19:09:39

回答

1

你的方式(通过paste创建一个新列)可能是最简单的。你也可以这样做:

require(reshape2) 
dcast(Person~Item+BuyOrSell,data=df,fun.aggregate=length,drop=FALSE) 
+0

谢谢你们。我增加了一个额外的要求,请建议有需要的人。 – user2171177 2013-03-14 20:33:34

+0

按照惯例,用户不会将后续问题提交给单个问题。你反而要求它作为一个单独的问题 – 2013-03-14 20:43:25

+0

好的谢谢你的头......我会发表一个不同的问题。 – user2171177 2013-03-14 20:46:55