【问题标题】:Using dcast to widen a data frame使用 dcast 加宽数据框
【发布时间】:2013-07-18 04:38:12
【问题描述】:

我有以下数据框:

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

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

我希望是这样的:

id x y z
 1 4 3 2
 2 4 4 1

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

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

dcast(z,id ~ item,sum)

它会返回这个:

id x y z
1 1 1 1
2 2 2 2

我做错了什么?

【问题讨论】:

    标签: r reshape reshape2


    【解决方案1】:

    我不确定您为什么要在其中放置“求和”函数。试试这个:

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

    【讨论】:

    • 是的,这行得通。我刚刚想通了,但你打败了我:)
    • 这个答案现在是错误的,因为它产生:“警告消息:在 dcast(z, id ~ item, value.var = "freq") : data.table 中的 dcast 泛型已通过一个 data.frame 并将尝试重定向到 reshape2::dcast;请注意 reshape2 已弃用,此重定向现在也已弃用。请像 reshape2::dcast(z) 一样自己执行此重定向。在下一个版本中,此警告将变为错误。"
    • @tchevrier, dcast 出现在“data.table”和“reshape2”中。 “reshape2”没有进一步开发,但它已经更新到足以留在 CRAN 上。如果“data.table”在“reshape2”之后加载,它的dcast 会屏蔽“reshape2”中的那个,并产生此警告。如果从未加载过“data.table”,那么这个答案就可以了。如果在“reshape2”之前加载“data.table”,这个答案就可以了。如果同时加载了“data.table”和“reshape2”,那么用户最好使用package::function 指定他们想要使用的命名空间。答案还是可以的。
    • 完全同意 - 但上述答案中没有任何地方显示。比你更清楚。
    • @tchevrier,没有明确提及这一点的原因是在问答时(2013 年 7 月)没有 dcast 的“data.table”版本。 dcast.data.table 直到 2014 年 2 月才推出,直到 2015 年 9 月才成为 data.table 泛型。所以,当时只有一个 dcast,它来自“reshape2”,在标签。如果您有兴趣,可以在 data.table Github 页面的 NEWS 文件中阅读有关该过程的有趣内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 2019-07-23
    • 2015-11-21
    • 1970-01-01
    • 2023-04-06
    相关资源
    最近更新 更多