全部 -
我需要在R中将长格式更改为宽格式,但我需要将列值设置为1或0,具体取决于主题是否存在特定变量。
输入数据如下:
Subject Product
1 ProdA
1 ProdB
1 ProdC
2 ProdB
2 ProdC
2 ProdD
3 ProdA
3 ProdB
我希望它是
Subject ProdA ProdB ProdC ProdD
1 1 1 1 0
2 0 1 1 1
3 1 1 0 0
R有什么方法可以实现这个目标吗?
编辑:
我认为的一种方法是首先列出数据:
tbl<-data.frame(table(data))
然后申请
final <- cast(tbl, Subject~Product, max)
我想知道是否有更有效的方式?
答案 0 :(得分:1)
xtabs(data=dat)
Product
Subject ProdA ProdB ProdC ProdD
1 1 1 1 0
2 0 1 1 1
3 1 1 0 0
稍微更易读的版本会使公式明确:
xtabs( ~Subject+Product, data=dat)
如果您想使用stats :: reshape,请尝试以下操作:
reshape(dat, idvar="Subject", timevar=2, v.names="Product", direction="wide")
Subject Product.ProdA Product.ProdB Product.ProdC Product.ProdD
1 1 ProdA ProdB ProdC <NA>
4 2 <NA> ProdB ProdC ProdD
7 3 ProdA ProdB <NA> <NA>
(但它没有返回数字。)