R使用dcast扩展数据帧

bro*_*oli 2 r reshape reshape2

我有以下数据框:

z <- data.frame(
                item=letters[rep(24:26,2)],
                freq=c(4,3,2,4,4,1),
                id=rep(1:2,each=3)
               )

item freq id
x    4    1
y    3    1
z    2    1
x    4    2
y    4    2
z    1    2
Run Code Online (Sandbox Code Playgroud)

数据框在每个id,item组合上都是唯一的.

我希望它是这样的:

id x y z
 1 4 3 2
 2 4 4 1
Run Code Online (Sandbox Code Playgroud)

这看起来像一个相当简单的转换,但我似乎无法让它工作.

这是我尝试过的(z是数据框的名称):

dcast(z,id ~ item,sum)
Run Code Online (Sandbox Code Playgroud)

它返回:

id x y z
1 1 1 1
2 2 2 2
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

A5C*_*2T1 5

我不确定你为什么要把"和"功能放在那里.试试这个:

> dcast(z, id ~ item, value.var="freq")
  id x y z
1  1 4 3 2
2  2 4 4 1
Run Code Online (Sandbox Code Playgroud)

  • @tchevrier,`dcast` 出现在“data.table”和“reshape2”中。“reshape2”没有得到进一步开发,但它已经更新到足以留在 CRAN 上。如果“data.table”在“reshape2”之后加载,则其“dcast”会屏蔽“reshape2”中的数据,并产生此警告。如果“data.table”从未加载过,这个答案就很好。如果“data.table”在“reshape2”之前加载,这个答案就很好。如果“data.table”和“reshape2”都被加载,那么用户最好通过使用 `package::function` 来指定他们想要使用的命名空间。答案还是可以的。 (3认同)
  • @tchevrier,没有明确提及这一点的原因是因为在问答时(2013 年 7 月)没有“dcast”的“data.table”版本。`dcast.data.table` 直到 2014 年 2 月才被引入,并且直到 2015 年 9 月才成为 `data.table` 泛型。因此,当时只有一个 `dcast`,它来自“reshape2” ,标签中提到了。如果您有兴趣,可以在 data.table Github 页面的 NEWS 文件中阅读有关该过程的有趣内容。 (3认同)