2013-08-04 73 views
-1
> 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 ,如果是的话,它将如何完成?使用plyr将long data.frame重塑为一个宽泛的结构?

+5

我们希望你做一些更多的研究在自己的第一个。您发布了两个相同的问题,除了要求使用plyr和其他data.table的解决方案之外,它们是相同的。在另一个问题中,你明确表示你还没有熟悉data.table,并且在对这个问题的回答的评论中,你清楚地表明你对plyr不熟悉。如果您认为解决方案是一个plyr解决方案对您很重要,那么您首先尝试了解plyr是否是/什么是一个先决条件。 – GSee

+0

我很好奇这个用例。不明白为什么对两种独立解决方案感兴趣是一个问题。 – Raffael

+1

@Яaffael1984问题是你没有显示任何努力来解决你自己的问题。想象一下,我问这是一个问题,我问你怎么在'php'没有任何尝试? – agstudy

回答

3

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

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
  • variable = .(x):我使用.。这是一个plyr功能。这个函数是 用于捕获变量的名称,而不是它们的当前值。
  • function =这里的匿名函数function(t){....}。一个班轮功能不需要{

ddply,我最常做的是:

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

然后我检查吨实时...

+0

因为我是plyr的新手,所以我将不胜感激。 F.x:'。(X)'表达了什么 - 这个点有特殊含义吗?为什么它只是使用函数(t) - 是一个常规的匿名函数?我想知道,因为身体不见了。 :) – Raffael

+0

@Яaffael1984我添加了一些解释。希望它是明确的。 – agstudy

+1

+10如果我可以!非常感谢! – Raffael