Shaxi Liver
Shaxi Liver

Reputation: 1120

How to "back" melt function from reshape2 package?

That's my data:

> 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

so I used a melt function from reshape2 package to reorganize my data. Now it looks like that:

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

I did some calculations on my data and now there is an extra column. Let's call it "rt". I'd like to transform my data now to the previous "state" with this an extra column. Do you know any function which would be useful ?

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")

Upvotes: 2

Views: 1527

Answers (1)

A5C1D2H2I1M1N2O1R2T1
A5C1D2H2I1M1N2O1R2T1

Reputation: 193547

In the "reshape2" universe, melt and *cast go hand-in-hand.

Here's an example of melting a data.frame and dcasting it back to its original form. You would need to take a similar approach with your data.

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

In the dcast step, think of the items before the ~ as being the "id" variables, and those coming after as being the resulting column names. value.var should be the column from which the values will fill in the resulting "grid" created by the id variables and column names.

Upvotes: 7

Related Questions