【问题标题】:Reshape long data.frame into a wide structure using plyr?使用 plyr 将长 data.frame 重塑为宽结构?
【发布时间】:2013-08-04 21:21:16
【问题描述】:
> A <- data.frame(x = c(1,1,2,2), y = c(1,2,1,2), v = c(0.1,0.2,0.3,0.4))
> A
  x y   v
1 1 1 0.1
2 1 2 0.2
3 2 1 0.3
4 2 2 0.4

> B <- dcast(A, x~y)
Using v as value column: use value.var to override.
> B
  x   1   2
1 1 0.1 0.2
2 2 0.3 0.4

是否可以使用 plyr 将 A 重塑为 B,如果可以,如何完成?

【问题讨论】:

  • 我们希望您先自己做更多的研究。您背靠背发布了 2 个相同的问题,除了一个要求使用 plyr 和另一个 data.table 的解决方案。在另一个问题中,您明确表示您尚未熟悉 data.table,并且在该问题的答案的 cmets 中您明确表示您不熟悉 plyr。如果解决方案是 plyr 解决方案对您很重要,那么您首先尝试了解 plyr 是什么/做什么是一个先决条件。
  • 我对这个用例很好奇。不明白为什么对两个不同的解决方案感兴趣是个问题。
  • @Яaffael1984 问题是你没有表现出任何努力自己解决问题。想象一下,我将这个问题作为一个问题发布,然后我问你如何在php 中做到这一点而无需任何尝试?
  • 这有点苛刻。我只是喜欢与实际相关的重要用例,以了解事物的工作原理。就像有些人从后往前看杂志。只是个人喜好问题;)
  • 顺便说一句 - 我确实浏览了 plyr 的手册。我只是没有找到我要找的东西,agstudy 的答案表明该解决方案肯定不是微不足道的。所以我不知道为什么会有这种负面反馈和反对票。

标签: r dataframe plyr


【解决方案1】:

是的,例如你可以这样做:

library(plyr)
ddply(A,.(x),function(t)setNames(t$v,t$y))
  x   1   2
1 1 0.1 0.2
2 2 0.3 0.4

编辑添加一些关于使用ddply的解释(最好阅读文档并在SO或网络中查看许多示例):

一般语法如下:

ddply(data.frame, variable(s), function, optional arguments)
  • data.frame = A
  • 变量=.(x):我使用.。这是一个 plyr 函数。这个功能是 用于捕获变量的名称,而不是它们的当前值。
  • function = 匿名函数function(t){....}。一个线性函数不需要{

ddply内,我通常做的事情如下:

ddply(mydf, .(var), function(t) browser() )

然后我实时检查 t ...

【讨论】:

  • 我不胜感激,因为我是 plyr 的新手。 F.x.: '.(X)' 表达什么 - 这个点有什么特殊含义吗?为什么它只使用 function(t) - 那是一个常规的匿名函数吗?我想知道,因为身体不见了。 :)
猜你喜欢
  • 2013-08-05
  • 2021-10-26
相关资源
最近更新 更多