使用指标从长格式转换为宽格式

时间:2011-09-23 20:14:43

标签: r

全部 -

我需要在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)

我想知道是否有更有效的方式?

1 个答案:

答案 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>

(但它没有返回数字。)