2013-08-04 69 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