【问题标题】:Change from long to wide format with indicators使用指标从长格式更改为宽格式
【发布时间】:2011-11-23 23:04:41
【问题描述】:

全部-

我需要在 R 中从长格式更改为宽格式,但我需要将列值设为 1 或零,具体取决于主题是否存在特定变量。

输入数据如下:

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)

不知道有没有更高效的方法?

【问题讨论】:

    标签: r


    【解决方案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>
    

    (但它不返回数字。)

    【讨论】:

    • 您是否碰巧知道 xtabs 是否有效 - 与 reshape() 方法相比?我的表大约有 900,000 行(413,000 个不同的主题和 50 个不同的产品),在 18 gig 的 RAM(64 位 Windows 7)上,由于内存不足,作业失败。
    • 似乎认为这不足以耗尽 RAM 的供应。究竟是什么错误信息?
    • 很奇怪,我在 RStudio 中运行时遇到错误。当我在 Revolution Analytics Enterprise 中运行相同的程序时,绝对没有问题,而且运行速度很快。
    猜你喜欢
    • 1970-01-01
    • 2021-08-01
    相关资源
    最近更新 更多