2013-10-28 29 views
2

這是我的數據:如何從reshape2包中「倒退」融化函數?

> head(data) 

    id C1 C2 C3 B1 B2 B3 Name 
    12 3 12 8 1 3 12 Agar 
    14 4 11 9 5 12 14 LB 
    18 7 17 6 7 14 16 YEF 
    20 9 15 4 3 11 17 KAN 

所以我用熔體功能從reshape2包重新安排我的數據。現在看起來像這樣:

dt <- melt(data, measure.vars=2:7) 

> head(dt) 

    n v variable value rt 
1 id Name  p C1 1 
2 12 Agar  p  3 2 
3 14 LB  p  4 3 
4 18 YEF  p  7 6 
5 20 KAN  p  9 3 
6 id Name  u C2 1 

我對我的數據做了一些計算,現在有一個額外的列。我們稱之爲「rt」。我想通過這個額外的列將我的數據轉換爲之前的「狀態」。你知道任何有用的功能嗎?

dput(dt) 
structure(list(n = structure(c(5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 
3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 
4L, 5L, 1L, 2L, 3L, 4L), class = "factor", .Label = c("12", "14", 
"18", "20", "id")), v = structure(c(4L, 1L, 3L, 5L, 2L, 4L, 1L, 
3L, 5L, 2L, 4L, 1L, 3L, 5L, 2L, 4L, 1L, 3L, 5L, 2L, 4L, 1L, 3L, 
5L, 2L, 4L, 1L, 3L, 5L, 2L), class = "factor", .Label = c("Agar", 
"KAN", "LB", "Name", "YEF")), variable = structure(c(1L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 
4L, 4L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L), .Label = c("p", 
"u", "k", "l", "t", "h"), class = "factor"), value = c("C1", 
"3", "4", "7", "9", "C2", "12", "11", "17", "15", "C3", "8", 
"9", "6", "4", "B1", "1", "5", "7", "3", "B2", "3", "12", "14", 
"11", "B3", "12", "14", "16", "17")), .Names = c("n", "v", "variable", 
"value"), row.names = c(NA, -30L), class = "data.frame") 
+3

該功能可能是'dcast',但如果您需要有意義的幫助,則需要提供可重複的示例。 – A5C1D2H2I1M1N2O1R2T1

+1

[請參閱此鏈接](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。給出適當的可重現的例子可能會得到更好更快的答案。 –

+0

您能告訴我我的例子中究竟缺少了什麼?我試圖遵循所有的規則:最小數據集被給出,包被提及。如果你的意思是關於可運行代碼,所以我不知道應該使用哪個函數。我們來試試這個dcast吧:)。 –

回答

6

在「reshape2」宇宙melt*cast去手牽手。

下面是一個例子melt ing data.framedcast回到它的原始形式。您需要對數據採取類似的方法。

mydf <- data.frame(A = LETTERS[1:3], B = 1:3, C = 4:6) 
mydf 
# A B C 
# 1 A 1 4 
# 2 B 2 5 
# 3 C 3 6 

library(reshape2) 

mDF <- melt(mydf, id.vars="A") 
mDF 
dcast(mDF, A ~ variable, value.var="value") 
# A B C 
# 1 A 1 4 
# 2 B 2 5 
# 3 C 3 6 

dcast一步,~想起以前的項目作爲是「ID」的變量,而那些即將之後作爲所產生的列名。 value.var應該是從其中值填充由id變量和列名稱創建的結果「網格」的列。

+0

是的,這就是我正在尋找的。現在我只需要嘗試將其適用於我的數據集,這並不容易。 –

+0

@ShaxiLiver,我想我很容易看到你的問題。看起來你融合了一個數據集,它的列名是第一行。儘管如此,你只需要做大部分的工作:'dcast(dt,n + v〜variable,value.var =「value」)' – A5C1D2H2I1M1N2O1R2T1

+0

是的,就是這樣。最後一個問題是新數據集的最後一行應該是第一個精確的。任何想法如何解決它? –